OpenID Connect Core 1.0(七)使用混合流验证
3.3 使用混合流验证(Authentication using the Hybrid Flow)
本节描述如何使用混合流执行验证。当使用混合流(Hybrid Flow)时一些令牌从授权端点返回,另一些则从令牌端点返回。混合流中返回令牌的机制在OAuth 2.0多响应类型编码实践中指定[OAuth. responses]。
3.3.1 混合流程的步骤(Hybrid Flow Steps)
混合流程遵循以下步骤:
1、客户准备一个包含所需的验证请求的请求参数。
2、客户端发送请求到授权服务器。
3、授权服务器验证用户。
4、授权服务器获得用户同意/授权。
5、授权服务器将终端用户发送给回客户端一个授权码,根据响应类型,返回一个或多个额外的参数。
6、客户端使用的这个授权码到令牌终结点请求响应。
7、客户端接收到包含一个ID Token和Access Token的body响应。
8、客户端验证ID Token和检索终端用户的 Subject 标识符。
3.3.2 授权终结点(Authorization Endpoint)
当使用混合流程,使用授权的终结点,是以3.1.2节定义的授权码流程的一样的方式使用授权的终结点,除了在本节中指定的差异。
3.3.2.1 验证请求(Authentication Request)
验证请求是由3.1.2.1节中定义 ,除了以下使用的验证请求参数:
response_type
必需的。确定要使用的授权处理流的OAuth 2.0响应类型值,包括从使用的端点返回的参数。当使用混合流程,此值是“code id_token” ,“code token”,或“code id_token token”。这些值定义在 OAuth 2.0 Multiple Response Type Encoding Practices [OAuth.Responses]。
下面是一个使用混合流的非规范示例请求,该混合流将由用户代理发送到授权服务器,以响应客户机相应的HTTP 302重定向响应(换行仅为显示):
GET /authorize?
response_type=code%20id_token
&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&scope=openid%20profile%20email
&nonce=n-0S6_WzA2Mj
&state=af0ifjsldkj HTTP/1.1
Host: server.example.com
3.3.2.2 验证请求验证(Authentication Request Validation)
当使用混合流程,验证请求的验证方式与第3.1.2.2节中定义的授权代码流相同。
3.3.2.3 授权服务器验证用户(Authorization Server Authenticates End-User)
当使用混合流程,终端用户身份验证的执行方式与第3.1.2.3节中定义的授权代码流相同。
3.3.2.4授权服务器获得用户同意/授权(Authorization Server Obtains End-User Consent/Authorization)
当使用混合流程,最终用户同意的获得方式与第3.1.2.4节中定义的授权代码流相同。
3.3.2.5成功的验证响应(Successful Authentication Response)
当使用混合流程,以隐式流程3.2.2.5节中定义的同样方式验证响应,除了在本节中指定的差异。
这些授权终结点结果的使用方式如下:
access_token
OAuth 2.0Access Token。当 response_type 使用的值是 code token,或 code id_token token返回。(token_type 值也在同样的情况下返回。)
id_token
ID Token。当 response_type 使用的值是code id_token 或 code id_token token时返回。
code
授权码。当使用混合流时,其总是返回。
下面是一个非规范化成功的响应使用混合流程的例子(换行仅为显示):
HTTP/1.1 302 Found
Location: https://client.example.org/cb#
code=SplxlOBeZQQYbYS6WxSbIA
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&state=af0ifjsldkj
3.3.2.6 验证错误响应(Authentication Error Response)
当使用混合流程,授权错误响应的方式与第3.1.2.6节中定义的授权代码流相同,除了在本节中指定的差异。
如果最终用户拒绝请求或最终用户身份验证失败,授权服务器必须在重定向URI的片段组件中返回错误授权响应,OAuth 2.0 (RFC6749) 4.2.2.1中定义和 OAuth 2.0多个响应类型编码实践 (OAuth.Responses) 中定义,除非指定不同的响应模式。
3.3.2.7 重定向URI片段处理(Redirect URI Fragment Handling)
当使用混合流程,重定向的URI参数处理片段与隐式流程3.2.2.7部分中定义请求相同。同时参照 15.5.3节中URI片段处理实现注意事项。
3.3.2.8 身份响应验证(Authentication Response Validation)
当使用混合流程,客户端必须验证如下响应:
1、验证的响应符合[OAuth.Responses]的第五节 。
2、遵循RFC 6749的验证规则,尤其是4.2.2和10.12部分。
3、遵循3.3.2.12验证规则,验证ID Token ,response_type 使用的值是“code id_token” 或“code id_token token”。
4、遵循3.3.2.9部分验证规则,验证IAccess Token ,当 response_type 使用的值“code token”或“code id_token token”。
5、遵循3.3.2.10部分规则,验证授权码,当 response_type使用的值是“code id_token ”或“code id_token”。
3.3.2.9 Access Token验证(Access Token Validation)
当使用混合流时,从授权终结点返回的Access Token将以与隐式流相同的方式进行验证,如3.2.2.9节中定义的那样。
3.3.2.10 授权码验证(Authorization Code Validation)
要使用ID Token验证授权结点发出的授权码,客户端应该执行以下操作:
1、用JWA 中为ID Token的JOSE报头的alg报头参数指定的哈希算法对代码的ASCII表示的八字节进行哈希。例如,如果alg是RS256,则使用的哈希算法是SHA-256。
2、取散列的最左边一半,然后对其进行base64url编码。
3. 如果ID Token中存在c_hash,则ID Token中的c_hash值必须与前一步中生成的值匹配。
3.3.2.11 ID Token
ID Token的内容如第2节所述。当使用混合流时,以下ID Token声明的这些附加要求适用于授权终结点返回的ID Token:
nonce
nonce 声明是必需。
at_hash
Access Token的哈希值。它的值是access_token值的ASCII表示的最左半哈希的base64url编码,其中使用的哈希算法是ID Token的JOSE头的alg头参数中使用的哈希算法。例如,如果alg是RS256,那么用SHA-256散列access_token值,然后取最左边的128位,base64url对其进行编码。at_hash值是一个区分大小写的字符串。
如果ID Token使用access_token值从授权终结点发出,则需要使用access_token,这是response_type值代码id_token的情况;否则,它是可选的。
c_hash
Code 的哈希值。它的值是Code的ASCII表示的最左半哈希的base64url编码,其中使用的哈希算法是ID Token的JOSE报头的alg报头参数中使用的哈希算法。例如,如果alg是HS512,用SHA-512对Code进行哈希,然后取最左边的256位,base64url对其进行编码。c_hash值是一个区分大小写的字符串。
如果ID Token是通过从授权终结点发出的Code,对于response_type值code id_token和code id_token来说,这是必需的;否则,它是可选的。
3.3.2.12 ID Token验证(ID Token Validation)
在使用混合流时,必须以与隐式流相同的方式验证从授权终结点返回的ID Token的内容,如3.2.2.11节中定义的那样。
3.3.3 令牌终结点(Token Endpoint)
在使用混合流时,令牌终结点的使用方式与第3.1.3节中定义的授权代码流相同,但本节中指定的差异除外。
3.3.3.1 令牌的请求(Token Request)
当使用混合流时,令牌请求的方式与授权代码流的方式相同,如3.1.3.1节中定义的那样。
3.3.3.2 请求令牌验证(Token Request Validation)
在使用混合流时,令牌请求的验证方式与在3.1.3.2节中定义的授权代码流相同。
3.3.3.3 成功的令牌响应
当使用混合流时,令牌响应的方式与授权代码流的方式相同,如3.1.3.3节中定义的那样。
3.3.3.4 令牌错误响应
当使用混合流时,令牌错误响应的方式与授权代码流相同,如3.1.3.4节中定义的那样。
3.3.3.5 令牌响应确认
在使用混合流时,令牌响应的验证方式与在3.1.3.5节中定义的授权代码流相同。
3.3.3.6 ID Token(ID Token)
在使用混合流时,从令牌终结点返回的ID Token的内容与从授权终结点返回的ID Token的内容相同,如3.3.2.11节中定义的那样,但本节中指定的差异除外。
如果一个ID Token从授权终结点和令牌终结点返回,对于response_type值code id_token和code id_token来说就是这样,那么iss和sub声明值在这两个ID Token中必须是相同的。任何一方中出现的关于身份验证事件的所有声明都应该出现在双方中。如果任何一个ID Token都包含关于最终用户的声明,那么在两者中出现的任何声明都应该具有相同的值。注意,出于隐私原因,OP可能选择从授权终结点返回关于最终用户的最少声明。从ID Token牌终结点返回,at_hash和c_hash声称可以省略,即使这些声明出现在从授权终结点中返回的 ID Token中,因为ID Token和Access Token值,在令牌终结点中返回时已经通过TLS加密并绑定在一起。
3.3.3.7 ID Token验证(ID Token Validation)
在使用混合流时,从令牌端点返回的ID令牌的内容必须以与在3.1.3.7节中定义的授权代码流相同的方式进行验证。
3.3.3.8 Access Token(Access Token)
如果一个从令牌的终结点的Access Token授权端返回,当 response_type 值是 “code id_token”和 “code id_token token” ,它们的值可能是相同的或者他们可能会有所不同。注意,可能会有不同的Access Token返回,这是由于两个端点的不同安全特性以及它们授予的资源的使用寿命和访问时间可能也不同。
3.3.3.9 Access Token验证(Access Token Validation)
当使用混合流时,从令牌端点返回的访问令牌将以与授权代码流相同的方式进行验证,如3.1.3.8节中定义的那样。
OpenID Connect Core 1.0(七)使用混合流验证的更多相关文章
- OpenID Connect Core 1.0(一)介绍
IdentityServer4是基于OpenID Connect and OAuth 2.0框架,OpenID Connect Core 1.0是IdentityServer4最重要的文档 By 道法 ...
- OpenID Connect Core 1.0(四)使用授权码流验证(上)
3.1 使用授权码流验证(Authentication using the Authorization Code Flow) 本节描述如何使用授权码流执行验证.当使用授权码流时,会从令牌终结点返回的所 ...
- OpenID Connect Core 1.0(九)声明(Claims)
5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...
- OpenID Connect Core 1.0(三)验证
OpenID Connect执行终端用户登录或确定终端用户已经登录的验证工作.OpenID Connect 使服务器以一种安全的方式返回验证结果.所以客户可以依靠它.出于这个原因,在这种情况下客户被称 ...
- OpenID Connect Core 1.0(八)从第三方发起登录
在某些情况下,登录流程由一个OpenID提供者或其他方发起,而不是依赖方(RP).在这种情况下,发起者重定向到RP在发起登录终结点,RP的请求验证请求发送到指定的OP.这个发起登录终结点可以在RP深度 ...
- OpenID Connect Core 1.0(六)使用隐式验证流
3.2 使用隐式验证流(Authentication using the Implicit Flow) 本节描述如何使用隐式流程执行验证.使用隐式流程时,所有令牌从授权终结点返回:不使用令牌终结点返回 ...
- OpenID Connect Core 1.0(五)使用授权码流验证(下)
3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...
- OpenID Connect Core 1.0(二)ID Token
2.ID Token(ID Token) OpenID Connect主要是对OAuth 2.0 能够使得终端用户通过ID Token的数据结构进行验证.当客户端和潜在的其他请求声明,ID Token ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
随机推荐
- BZOJ3512:DZY Loves Math IV
传送门 Sol 好神仙的题目.. 一开始就直接莫比乌斯反演然后就 \(GG\) 了 orz 题解 permui 枚举 \(n\),就是求 \(\sum_{i=1}^{n}S(i,m)\) 其中\(S( ...
- CSS3字体火焰燃烧效果
动画的CSS: // fire @keyframes fireDiv { 0% { text-shadow: 0 0 4px white, 0 -5px 4px #ff3, 2px -10px 6px ...
- drupal7 获取当前使用的主题的名称
直接引用全局变量就行: 参考: 代码测试: global $theme, $theme_key; echo $theme; echo '<br>'; echo $theme_key; 结果 ...
- JS 变量 命名规范 oDiv aDiv 等
l命名规范及必要性 l可读性--能看懂 l规范性--符合规则 l匈牙利命名法 l类型前缀 类型 前缀 类型 实例 数组 a Array aItems 布尔值 b Boolean bIsComplete ...
- ArcGIS10.x Engine直连提示连接超时ORA-12170 来自:http://www.iarcgis.com/?p=1004
导语 随着Esri大力宣传直连,用户也越来越由服务连接,改为直连,当然ArcGIS Engine开发用户也不例外. 环境 Oracle数据库,ArcGIS版本不限,不过由于9版本多以服务连接,以10版 ...
- JavaScript运算符优先级引起的bug
[下面是昨天发给同事的邮件,为防止泄露商业机密,隐去了项目名和变量名] ==================================================== 昨天发现Nx代码中的一 ...
- flask请求流程
- 规划将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager
尽管 Azure 资源管理器提供了许多精彩功能,但请务必计划迁移,以确保一切顺利进行. 花时间进行规划可确保执行迁移活动时不会遇到问题. Note 以下指导的主要参与者为 Azure 客户顾问团队,以 ...
- MySQL Database on Azure服务在中国正式商用
基于由世纪互联运营的Windows Azure平台,MySQL Database on Azure服务助力中国用户实现数据库在云端的快速部署.推进用户的创新开发 2015年9月10日,北京——微软中国 ...
- awk 正则表达式、正则运算符详细介绍
前言:使用awk作为文本处理工具,正则表达式是少不了的. 要掌握这个工具的正则表达式使用.其实,我们不必单独去学习它的正则表达式.正则表达式就像一门程序语言,有自己语法规则已经表示意思. 对于不同工具 ...