一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
1.发现端点
1.发现端点可用于检索有关IdentityServer的元数据 - 它返回发布者名称,密钥材料,支持的范围等信息。有关详细信息,。
2.发现端点可通过/.well-known/openid-configuration相对于基地址获得,可以使用IdentityModel客户端库从.NET代码访问发现端点
https://demo.identityserver.io/.well-known/openid-configuration
2.端点授权
授权端点可用于通过浏览器请求令牌或授权码,过程通常涉及最终用户的身份验证和可选的同意。
-
client_id客户的标识符 -
scope一个或多个注册范围 -
redirect_uriwomen需要保证必须与该客户端允许的重定向URI之一完全匹配 -
response_typeid_token请求身份令牌(仅允许身份范围)token请求访问令牌(仅允许资源范围)id_token token请求身份令牌和访问令牌code请求授权码code id_token请求授权代码和身份令牌code id_token token请求授权代码,身份令牌和访问令牌
-
response_modeform_post将令牌响应作为表单发送而不是片段编码重定向(可选)
-
stateidentityserver将回显令牌响应的状态值,这是针对客户端和提供者之间的往返状态,关联请求和响应以及CSRF /重放保护。(推荐的) -
nonce
identityserver将回显身份令牌中的nonce值,这是为了重放保护) 通过隐式授权对身份令牌是必需的。 -
promptnone请求期间不会显示任何UI。如果这是不可能的(例如,因为用户必须登录或同意),则返回错误login即使用户已登录并具有有效会话,也会显示登录UI
-
code_challenge
发送PKCE的代码质询 -
code_challenge_method
plain表示挑战是使用纯文本(不推荐) S256表示使用SHA256对挑战进行哈希处理 -
login_hint
可用于预先填写登录页面上的用户名字段 -
ui_locales
提供有关登录UI所需显示语言的提示 -
max_age
如果用户的登录会话超过最大年龄(以秒为单位),将显示登录UI -
acr_values
允许传递其他身份验证相关信息 - 身份服务器特殊情况下面的专有acr_values:idp:name_of_idp绕过login / home领域屏幕并将用户直接转发到选定的身份提供者(如果允许每个客户端配置)tenant:name_of_tenant可用于将租户名称传递给登录UI
删除URL编码,并添加了换行符以提高可读性
GET /connect/authorize?
client_id=client1&
scope=openid email api1&
response_type=id_token token&
redirect_uri=https://myapp/callback&
state=abc&
nonce=xyz
3.用户端点
UserInfo端点可用于检索有关用户的身份信息,调用者需要发送代表用户的有效访问令牌。根据授予的范围,UserInfo端点将返回映射的声明(需要openid作用域)。
GET /connect/userinfo
Authorization: Bearer <access_token>
HTTP/1.1 200 OK
Content-Type: application/json
{
"sub": "248289761001",
"name": "Bob Smith",
"given_name": "Bob",
"family_name": "Smith",
"role": [
"user",
"admin"
]
}
4.端点令牌
令牌端点可用于以编程方式请求令牌。它支持password,authorization_code,client_credentials,refresh_token和urn:ietf:params:oauth:grant-type:device_code的类型。此外,可以扩展令牌端点以支持扩展授权类型。
IdentityServer支持OpenID Connect和OAuth 2.0令牌请求参数的子集。
-
client_id客户标识符(必填) -
client_secret客户端密钥可以在帖子正文中,也可以作为基本身份验证标头。 -
grant_type
authorization_code,client_credentials,password,refresh_token,urn:ietf:params:oauth:grant-type:device_code或自定义 -
scope一个或多个注册范围。如果未指定,将发出所有明确允许范围的标记。 -
redirect_uriauthorization_code授权类型所需 -
code授权代码(authorization_code授权类型需要) -
code_verifierPKCE证明密钥 -
username资源所有者用户名(password授权类型所需) -
password资源所有者密码(password授予类型所需) -
acr_values
允许传递password授权类型的其他身份验证相关信息- identityserver特殊情况下面的专有acr_values:idp:name_of_idp绕过login/home领域页面并将用户直接转发到选定的身份提供者(如果允许每个客户端配置)tenant:name_of_tenant可用于将租户名称传递给令牌端点
-
refresh_token刷新令牌(refresh_token授予类型所需) -
device_code设备代码(urn:ietf:params:oauth:grant-type:device_code授权类型所需)
POST /connect/token
client_id=client1&
client_secret=secret&
grant_type=authorization_code&
code=hdh922&
redirect_uri=https://myapp.com/callback
5. 授权设备端点
设备授权端点用于请求设备和用户代码端点用于启动设备流授权过程,终端会话端点的URL可通过发现端点
-
client_id客户标识符(必填) -
client_secret客户端密钥可以在帖子正文中,也可以作为基本身份验证标头。可选的。 -
scope一个或多个注册范围。如果未指定,将发出所有明确允许范围的标记。
POST /connect/deviceauthorization
client_id=client1&
client_secret=secret&
scope=openid api1
6.内省端点
内省端点是RFC 7662的实现,它可用于验证引用令牌(如果消费者不支持适当的JWT或加密库,则可以使用JWT)。内省端点需要身份验证 - 因为内省端点的客户端是API,可以在其上配置秘钥ApiResource无效请求将返回400,未授权请求401。
POST /connect/introspect
Authorization: Basic xxxyyy
token=<token>
成功的响应将返回状态代码200以及活动或非活动令牌:
{
"active": true,
"sub": "123"
}
未知或过期的令牌将被标记为无效:
{
"active": false,
}
7.端点撤销
此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌。它实现了令牌撤销规范(RFC 7009)
-
token要撤销的令牌(必填) -
token_type_hintaccess_token或refresh_token(可选)
POST /connect/revocation HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token