OpenID Connect Core 1.0(六)使用隐式验证流
3.2 使用隐式验证流(Authentication using the Implicit Flow)
本节描述如何使用隐式流程执行验证。使用隐式流程时,所有令牌从授权终结点返回;不使用令牌终结点返回。
隐式流程主要是由客户在浏览器中使用脚本语言实现。直接返回Access Token和ID Token到客户端,这可能会让他们接触到最终用户和应用程序,这些用户可以访问终端用户的用户代理。授权服务器不进行客户端验证。
3.2.1隐式流程步骤(Implicit Flow Steps)
隐式流程动遵循以下步骤:
1、客户准备一个包含所需的验证请求的请求参数。
2、客户端发送请求到授权服务器。
3、授权服务器验证用户。
4、授权服务器获得用户同意/授权。
5、授权服务器将终端用户返回给客户端,并使用ID Token,如果需要的话,则可以使用一个Access Token。
6、客户端验证ID Token和检索终端用户的从属标识符。
3.2.2 授权终结点(Authorization Endpoint)
当使用隐式流程时,是以3.1.2节定义的授权码流程的一样的方式使用授权的终结点,除了在本节中指出的差异。
3.2.2.1验证请求(Authentication Request)
验证请求是由3.1.2.1节中定义,除了如下验证请求参数:
response_type
必需的。OAuth 2.0授权处理流程规定的响应类型值,包括返回终结点的参数。使用隐式流时,这个值是 “id_token token” 或 “id_token” 。这两个值的含义在OAuth 2.0多个响应类型编码实践 [OAuth.Responses] 中定义。没有Access Token值时只返回 id_token 。
注意:虽然OAuth 2.0还定义了隐式流程令牌响应类型值,但OpenID Connect不使用这种响应类型,因而没有返回ID Token。
redirect_uri
必需的。将发回响应的URI重定向。这个URI必须精确匹配客户端预注册的OpenID提供者的一个重定向URI值,匹配执行在 6.2.1节 (RFC3986) (简单的字符串比较) 中描述。当使用隐式流程时,重定向的URI 不能使用 http方案,除非客户端是一个本地应用程序,在这种情况下,它可能使用 http: 主机名是localhost。
nonce
必需的。用于将客户端会话与ID Token关联起来的字符串值,并减轻重播攻击。该值在请求ID Token中是不会修改的。nonec必须足够复杂,以防止攻击者猜测。实现说明,请参阅 15.5.2节 。
下面是一个非规范化的,使用隐式流程请求示例,这将是由用户代理发送到授权服务器,为以响应客户端相应的HTTP 302重定向响应(换行仅用于显示目的):
GET /authorize?
response_type=id_token%20token
&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&scope=openid%20profile
&state=af0ifjsldkj
&nonce=n-0S6_WzA2Mj HTTP/1.1
Host: server.example.com
3.2.2.2验证请求验证(Authentication Request Validation)
使用隐式流程时,其验证请求,与在 3.1.2.2节中定义的授权码流程方式一致。
3.2.2.3授权服务器验证用户(Authorization Server Authenticates End-User)
使用隐式流程时,终端用户执行验证,与在 3.1.2.3节中定义的授权码流程方式一致。
3.2.2.4授权服务器获得用户同意/授权(Authorization Server Obtains End-User Consent/Authorization)
使用隐式流程时,终端用户同意,与在 3.1.2.4节中定义的授权码流程方式一致。
3.2.2.5成功的验证响应(Successful Authentication Response)
使用隐式流程时,验证响应与在 3.1.2.5节中定义的授权码流程方式一致。
使用隐式流程时,所有响应参数添加到重定向的URI片段组件中,在 OAuth 2.0有多个响应类型编码实践 (OAuth.Responses),除非指定不同的响应模式。
下列参数将从授权终端返回:
access_token
OAuth 2.0的Access Token。该值会返回,除非所使用的 response_type 值是id token。
token_type
OAuth 2.0令牌类型的值。该值必须是Bearer或另一个与授权服务器协商好了的token_type 值。客户实现这个配置,必须支持 OAuth 2.0使用的Bearer令牌 (RFC6750)规范。配置仅仅描述了使用Bearer令牌。access_token返回情况相同。
id_token
必需的。ID Token。
state
OAuth 2.0状态值。如果state参数是出现在授权请求中。客户端必须确认state值是否等于授权请求时传入的state值。
expires_in
可选的。从响应发生到Access Token过期时间的秒数。
OAuth 2.0 (RFC6749) 中4.2.2节,当使用隐式流程没有code结果返回。
下面是一个使用隐式流成功响应的非规范示例(换行仅用于显示目的):
HTTP/1.1 302 Found
Location: https://client.example.org/cb#
access_token=SlAV32hkKG
&token_type=bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj
3.2.2.6验证错误响应(Authentication Error Response)
当使用隐式流程,授权错误响应与在 3.1.2.6节中定义的授权码流程方式一致。
如果最终用户拒绝了请求,或者终端用户身份验证失败,授权服务器必须在重定向URI的片段组件中返回错误授权响应,OAuth 2.0 (RFC6749) 4.2.2.1中定义的和 OAuth 2.0多个响应类型编码实践 (OAuth.Responses),除非指定不同的响应模式。
3.2.2.7重定向URI片段处理(Redirect URI Fragment Handling)
由于响应参数在重定向URI片段值中返回,所以客户端需要让用户代理解析片段编码的值,并将其传递给客户端的处理逻辑以供消费。有关URI片段处理的实现说明,请参阅第15.3节。
3.2.2.8验证响应验证(Authentication Response Validation)
使用隐式流程时,客户端必须验证响应如下:
1、验证的响应符合第五节 (OAuth.Responses) 。
2、遵循RFC 6749的验证规则,尤其是4.2.2和10.12部分。
3、按照3.2.2.11部分的ID Token验证规则。
4、按照3.2.2.9部分的Access Token验证规则,除非 response_type 使用的值是 id_token。
3.2.2.9 Access Token验证(Access Token Validation)
要验证带有ID Token的授权端点发出的Access Token,客户端应该做到以下几点:
1、用JWA 中指定的哈希算法对access_token的ASCII表示进行散列计算,以获得ID令牌的JOSE Header的alg头参数。例如,如果alg是RS256,那么使用的散列算法是SHA-256。
2、取最左边的一半哈希和base64url编码。
3、ID令牌中的at_hash值必须与上一步中生成的值相匹配。
3.2.2.10 ID Token(ID Token)
ID Token的内容在第二节中描述。使用隐式流程时,要求以下额外的声明申请ID Token:
nonce
使用 nonce 声明在隐式流中是必需。
at_hash
Access Token 散列值。它的值是base64url编码,它是 access_token 值的ASCII表示的八进制散列中最左半部分的编码,其中使用的散列算法是在ID令牌的JOSE 标头的alg头参数中使用的散列算法。例如,如果alg是RS256,用SHA-256将 access_token 值哈希,然后用最左边的128位和base64url编码它们。at_hash值是一个大小写敏感字符串。
如果带有 access_token值的 ID Token从授权端点颁发 ,当response_type值是id_token token,这是必需的;当response_type值是id_token时 access_token不会使用。
3.2.2.11 ID Token验证(ID Token Validation)
使用隐式流程时,必须以3.1.3.7中定义授权码流程的同样方式验证ID Token的内容,除了在本节中指定的差异。
1、客户端必须使用JWS的方法来验证 ID Token 的签名,其算法是在JOSE Header的alg头参数中指定。。
2. 必须检查nonce 声明值,以验证它是否与在认证请求中发送的值相同。客户端应该检查nonce值以防止重放攻击。检测重放攻击的精确方法用于特定客户端的。
OpenID Connect Core 1.0(六)使用隐式验证流的更多相关文章
- OpenID Connect Core 1.0(七)使用混合流验证
3.3 使用混合流验证(Authentication using the Hybrid Flow) 本节描述如何使用混合流执行验证.当使用混合流(Hybrid Flow)时一些令牌从授权端点返回,另一 ...
- 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(五)使用授权码流验证(下)
3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...
- OpenID Connect Core 1.0(三)验证
OpenID Connect执行终端用户登录或确定终端用户已经登录的验证工作.OpenID Connect 使服务器以一种安全的方式返回验证结果.所以客户可以依靠它.出于这个原因,在这种情况下客户被称 ...
- OpenID Connect Core 1.0(九)声明(Claims)
5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...
- OpenID Connect Core 1.0(八)从第三方发起登录
在某些情况下,登录流程由一个OpenID提供者或其他方发起,而不是依赖方(RP).在这种情况下,发起者重定向到RP在发起登录终结点,RP的请求验证请求发送到指定的OP.这个发起登录终结点可以在RP深度 ...
- 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 ...
随机推荐
- laravel之引入验证码类
1.将验证码类文件夹放入到指定的位置,放入位置可以自定义 2.在控制器中引入验证码文件 3.在验证码文件中可以根据自己的需要,对验证码的内容进行编辑(包括背景,画线,边框,内容) 4.在入口文件中开启 ...
- SQL-字符串运算符和函数
COALESCE(columnname,string) 函数 将 NULL 值作为字符串(用空字符串或其他字符串替换 NULL)- 接受一列输入值(字段)如果该字段为 NULL,则返回后面替换的字符串 ...
- Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({ //注意代码格式 //el:ele ...
- 使用OmniGraffle创建流程图
Mac下使用OmniGraffle创建是一个不错的选择 可以保存为OG格式,可以导出为VXD格式供visio使用
- springboot中filter的配置和顺序执行
项目结构 springboot版本 <parent> <groupId>org.springframework.boot</groupId> <artifac ...
- ERP行业销售如何挖掘潜在客户?
要看不同阶段,小企业发展到一定程度,第一个需求是单体财务系统.因为这个时候财务忙不过来了.在大一点就需要业务系统了,就是生产+进销存.有分公司就有集团级软件需求,接着就是oa啊HR啊上下游管理啊等等. ...
- 如何在 Azure 虚拟机里配置条带化
什么是条带化(striping) 条带 (strip) 是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法.简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法. 许 ...
- matlab中的决策树
1.函数 view(t)%画出决策树 prune %剪枝决策树 t2=prune(t,'level','level'/'node')%level:0 不剪枝 1 剪掉最后一层 2 最后两层%node: ...
- Asp.Net MVC Identity 2.2.1 使用技巧(五)
创建用户管理相关视图 1.添加视图 打开UsersAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系统会弹出 ...
- java.lang.UnsatisfiedLinkError: /usr/openv/java/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
解决办法: 在radhat 或者centos系统中运行一下命令即可:yum install libXext.x86_64yum install libXrender.x86_64yum install ...