图解auth2.0+OIDC

图解auth2.0+OIDC

一、auth2.0

auth2.0
auth2.0

客户端模式
客户端模式

授权码模式
授权码模式

简化模式
简化模式

密码模式
密码模式

二、Open Id Connect

Openid-connect1.0OpenId Connect是auth2.0的扩展。主要扩展了一个属性 id_token。

1. ID Token的主要构成部分如下:

iss = Issuer Identifier:必须。提供认证信息者的唯一标识。一般是一个https的url(不包含querystring和fragment部分)。
sub = Subject Identifier:必须。
iss提供的EU的标识,在iss范围内唯一。它会被RP用来标识唯一的用户。最长为255个ASCII个字符。
aud = Audience(s):必须。标识ID Token的受众。必须包含OAuth2的client_id。
exp = Expiration time:必须。过期时间,超过此时间的ID Token会作废不再被验证通过。
iat = Issued At Time:必须。JWT的构建的时间。
auth_time = AuthenticationTime:EU完成认证的时间。如果RP发送AuthN请求的时候携带max_age的参数,则此Claim是必须的。
nonce:RP发送请求的时候提供的随机字符串,用来减缓重放攻击,也可以来关联ID Token和RP本身的Session信息。
acr = Authentication Context Class Reference:可选。表示一个认证上下文引用值,可以用来标识认证上下文类。
amr = Authentication Methods References:可选。表示一组认证方法。
azp = Authorized party:可选。结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,一般情况下很少使用。其他属性

三、OIDC的认证流程

  • Authorization Code Flow:使用OAuth2的授权码来换取Id Token和Access Token。
  • Implicit Flow:使用OAuth2的Implicit流程获取Id Token和Access Token。
  • Hybrid Flow:混合Authorization Code Flow+Implici Flow。

1. 基于Authorization Code的认证请求

Authorization Code
Authorization Code

1-1. Authentication Request参数:

  • scope:必须。OIDC的请求必须包含值为“openid”的scope的参数。
  • response_type:必选。同OAuth2。
  • client_id:必选。同OAuth2。redirect_uri:必选。同OAuth2。
  • state:推荐。同OAuth2。防止CSRF, XSRF。

以下是可选:

  • response_mode:可选。OIDC新定义的参数(OAuth 2.0 Form Post Response Mode),用来指定 Authorization Endpoint以何种方式返回数据。
  • nonce:可选。ID Token中的出现的nonce就是来源于此。
  • display : 可选。指示授权服务器呈现怎样的界面给EU。有效值有(page,popup,touch,wap),其中默认是page。page=普通的页面,popup=弹出框,touch=支持触控的页面,wap=移动端页面。
  • prompt:可选。这个参数允许传递多个值,使用空格分隔。用来指示授权服务器是否引导EU重新认证和同意授权(consent,就是EU完成身份认证后的确认同意授权的页面)。有效值有(none,login,consent,select_account)。none=不现实任何认证和确认同意授权的页面,如果没有认证授权过,则返回错误login_required或interaction_required。login=重新引导EU进行身份认证,即使已经登录。consent=重新引导EU确认同意授权。select_account=假如EU在授权服务器有多个账号的话,允许EU选择一个账号进行认证。
  • max_age:可选。代表EU认证信息的有效时间,对应ID Token中auth_time的claim。比如设定是20分钟,则超过了时间,则需要引导EU重新认证。
  • ui_locales:可选。用户界面的本地化语言设置项。
  • id_token_hint:可选。之前发放的ID Token,如果ID Token经过验证且是有效的,则需要返回一个正常的响应;如果有误,则返回对应的错误提示。
  • login_hint:可选。向授权服务器提示登录标识符,EU可能会使用它登录(如果需要的话)。
  • acr_values:可选。Authentication Context Class Reference values,对应ID Token中的acr的Claim。

2. 基于Authorization Code的认证请求的响应

  • code:同OAuth2。
  • state:同OAuth2。

2-1. 使用上一步获得的code来请求Token EndPoint。

  • grant_type:授权模式,必填。
  • code:授权码。上一步的code。
  • redirect_uri:必选。必须和Authorization Request中提供的redirect_uri相同。
  • client_id:必选。必须和Authorization Request中提供的client_id相同。

2-2. Token EndPoint会返回响应的Token,其中除了OAuth2规定的部分数据外,还会附加一个id_token的字段。

  • access_token:令牌,必选项。
  • token_type:令牌类型,必选项,可以是bearer类型或mac类型。
  • expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
  • refresh_token:表示更新令牌,用来获取下一次的访问令牌,可选项。
  • scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
  • id_token:ID Token是一个安全令牌,是一个授权服务器提供的包含用户信息(由一组Cliams构成以及其他辅助的Cliams)的JWT格式的数据结构。

猜你喜欢

转载自www.cnblogs.com/mmry/p/10029630.html