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 ...
随机推荐
- 洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
题意 题目链接 Sol 这题打死我也不会想到后缀数组的,应该会全程想AC自动机之类的吧 但知道这题能用后缀数组做之后应该就不是那么难了 首先把\(S\)和\(S0\)拼到一起跑,求出Height数组 ...
- vue项目性能优化(路由懒加载、gzip加速、cdn加速)
前端工程性能优化一说意义深远悠长,本章主要介绍除了一些基础优化外如何实行路由懒加载.Gzip加速.CDN加速,让网页飞的快一些. 基础优化 老生常谈的一些: 不要在模板中写复杂的表达式 慎用watch ...
- 常用到的简单命令 Sublime Git NPM WindowsCMD MacTerminal(Unix命令) Vim
sublime 选择标签及其内容 ctrl+shift+a连续按两次 调出Package console: Mac: command + shift + p 安装插件: 1.调出 Package co ...
- python 静态 封装 继承 mro 接口 super
1.静态属性 静态方法 类方法 #!/usr/bin/python env # encoding: utf-8 # 静态属性 静态方法 class Room: tag = 168 def __ini ...
- 基于Vue的WebApp项目开发(六)
实现商品购买列表页面 步骤一:新建goodslist.vue文件 <template> <div id="tml"> <!--利用mui中的图文表格组 ...
- Selenium之TestNG安装
一.在Eclipse中安装TestNG 1.打开eclipse-->help-->Install New Software-->Add,输入Name和Location后,点击OK. ...
- elasticsearch 使用tcp 访问NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{Yk0WjtKbQXqYCJSDFRYlRA}
默认的 elasticsearch.yml 端口是9200,是给tcp提供的.如果想使用 自带的 TransportClient 需要配置为 tcp 的9300端口.配置方式为: 在/config/ ...
- 关于VSTS自动Build报错问题之Microsoft.Net.Compilers
报错内容如下: --06T11::.6035712Z ##[error]Dotnet command failed with non-zero exit code on the following p ...
- CAGradientLayer渐变颜色动画
CAGradientLayer渐变颜色动画 或许你用过CAGradientLayer,你知道他是用于渐变颜色的,但你是否直到,CAGradientLayer的渐变颜色是可以动画的哦. 源码: // / ...
- [翻译] DoActionSheet
DoActionSheet https://github.com/donobono/DoActionSheet An replacement for UIActionSheet : block-bas ...