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 ...
随机推荐
- [COCI2006-2007#1] Bond
状压DP \(dp[i]\)表示当前选人状态为\(i\)且选择了前\(i.count()\)个物品时最大的概率 #include"cstdio" #include"cst ...
- angular开发中的两大问题
一.在我们的angular开发中,会请求数据但轮播图等...在请求过数据后他的事件和方法将不再执行: 看我们的解决方案一: app.controller("text",functi ...
- 使用js在HTML中自定义字符串格式化方法
Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...
- 微服务架构之spring cloud gateway
Spring Cloud Gateway是spring cloud中起着非常重要的作用,是终端调用服务的入口,同时也是项目中每个服务对外暴露的统一口径,我们可以在网关中实现路径映射.权限验证.负载均衡 ...
- Latex表格太宽处理方法 (How to shorten Latex table length)
当表格太宽时, 为了能在页面中显示完整, 可以缩小表格, 或者横排.缩小表格的好处是, 不用倒转页面阅读, 坏处是原始宽度不同的表格, 被缩小后, 字体不一, 不美观. 虽然可以调整参数使得所有表格字 ...
- MUI框架-12-使用原生底部选项卡(凸出图标案例)
MUI框架-12-使用原生底部选项卡(凸出图标案例) 今天,用 mui 做 app 时,遇到了可能各位都遇到过的头疼问题:底部中间图标凸起,如下图: 最后有源代码 [提示]:有人问我在 HBuilde ...
- asp.net mvc4 小问题
最近在学习mvc4中间出现一些问题.留作记录.. 1.新建立的项目在vs2013中运行后会出现一个长轮询..这个叫browserLink 是vs2013中新加入的东西.至于更多解释.直接百度.. 关闭 ...
- win8 便签工具
启动或显示 Sticky Notes : Win+R--->StikyNot.exe 备份Sticky Notes 保存位置 : %AppData%\Microsoft\Sticky Notes ...
- 判断计算机是否可以ping通
#!/usr/bin/python # -*- coding: utf-8 -*- import os of = open('servers.txt','r') ofw=open('servers_p ...
- Python实例---游戏人生[类的学习]
# -*- coding:utf-8 -*- # ##################### 定义实现功能的类 ##################### class Person: def __in ...