IdentityServer4
IdentityServer4是为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth2.0协议的认证授权中间件。
OpenId Connect :
OpenID Connect 1.0 是基于OAuth 2.0协议之上的简单身份层,它允许客户端根据授权服务器的认证结果最终确认终端用户的身份,以及获取基本的用户信息;它是可扩展的协议,允许你使用某些可选功能,如身份数据加密、OpenID提供商发现、会话管理等。
端点
IdentityServer服务器提供的对外接口
发现端点:
发现端点可用于检索有关您的IdentityServer的元数据-它返回信息,例如发行者名称,密钥材料,支持的范围等。
通过/.well-known/openid-configuration访问发现端点
授权端点(/connect/authorize)
授权端点可用于通过URL请求令牌(AccessToken)或授权码(AuthorizationCode)。此过程通常涉及对用户的身份验证和可选同意
当使用授权码模式时,授权端点返回AuthorizationCode;
当使用简化模式时,授权端点返回AccessToken;
请求参数:
client_id:客户端标识符(必须)
scope:权限(必须)
redirect_url:返回参数的跳转URL(必须)
response_type:id_token-请求身份令牌,仅允许身份访问;token-请求访问令牌,仅允许资源访问;code-请求授权码
response_mode:form_post 发送令牌响应作为表单发布,而不是URL编码的重定向(可选)
state:这用于客户端和提供者之间的往返状态,将请求和响应以及CSRF /重放保护相关联。(推荐的)
nonce:身份令牌中的现时值,这是为了重播保护,通过隐式授予的身份令牌必需
code_challenge:发送PKCE的代码挑战
ui_locales:提供有关登录UI所需显示语言的提示
max_age:如果用户的登录会话超过数值(以秒为单位),则将显示登录界面
acr_values:允许传递与身份验证有关的信息,如下:(tenant:name_of_tenant可用于将租户名称传递给登录用户界面)
request:
code_challenge_method:
login_hint:
prompt:
例:
GET /connect/authorize?
client_id=client1&
scope=openid email api1&
response_type=id_token token&
redirect_uri=https://myapp/callback&
state=abc&
nonce=xyz
令牌端点(/connect/token)
令牌端点可用于应用后端请求令牌
请求参数:
client_id:客户端标识符(必须)
client_secret:客户端密码(可选)
grant_type:授权类型(authorization_code,client_credentials,password,refresh_token,urn:ietf:params:oauth:grant-type:device_code或自定义)
scope:权限(可选)
redirect_uri:authorization_code授权模式下必须??()
code:authorization_code授权模式下必须
username:用户名,password授权模式下必须
password:密码,password授权模式下必须
refresh_token:refresh_token授权模式下必须
device_code:device_code授权模式下必须
Example:
POST /connect/token
CONTENT-TYPE application/x-www-form-urlencoded
client_id=client1&
client_secret=secret&
grant_type=authorization_code&
code=hdh922&
redirect_uri=https://myapp.com/callback
UserInfo端点:(/connect/userinfo)
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"
]
}
设备授权端点?
自省端点(Introspection Endpoint)
它可以用来验证参考令牌,自省端点需要身份验证-由于自省端点的客户端是API,因此您可以在上配置密钥ApiResource
吊销端点
该端点允许撤销访问令牌(仅参考令牌)并刷新令牌
请求参数:
token:要撤销的token(必须)
token_type_hint:access_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
结束会话端点(End Session Endpoint)?
结束会话端点可用于触发单点注销(/connect/endsession)
要使用结束会话终结点,客户端应用程序会将用户的浏览器重定向到结束会话URL。用户在会话期间通过浏览器登录的所有应用程序都可以参与注销。