[认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)

  • 时间:
  • 浏览:2
  • 来源:彩神快乐8_神彩快乐8官方

在oauth2的授权码流程中,当response_type设置为code的以后,oauth2的授权服务会把authorization_code通过url的query次要传递给调用方,比如要是“https://client.lnh.dev/oauth2-callback?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz”。

oidc - discovery :http://openid.net/specs/openid-connect-discovery-1_0.html

相信亲戚亲戚要是人看了得懂的,它包中有 授权的url,获取token的url,取消 token的url,以及其对OIDC的扩展功能支持的情況等等信息,这里就不再删改解释每一项了。

顾名思义,Discovery定义了要是服务发现的规范,它定义了要是api( /.well-known/openid-configuration ),你这俩api返回要是json数据型态,其中中有 了要是OIDC中提供的服务以及其支持情況的描述信息,要是还时要使得oidc服务的RP还时要不再硬编码OIDC服务接口信息。你这俩api返回的示例信息如下(这上面要是一次要,更删改的信息在官方的规范中有 删改的描述和解释说明:http://openid.net/specs/openid-connect-discovery-1_0.html):

本篇博客介绍了OIDC的发现服务,OAuth2的要是扩展规范,以及OIDC管理会话的机制。至此则还时要构成要是删改的认证和退出的流程。其中有 要是时要怪怪的注意,你这俩流程中用到的token是OIDC定义的IDTokenIDTokenIDToken(重要要的事情说三遍),而前会 OAuth2中定义的Access Token,千万未必混淆这两者,它们是有着本质的区别的(你这俩点在[认证授权] 3.基于OAuth2的认证(译)和[认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心次要)中前会 解释)。

在本系列的第一篇博客[认证授权] 1.OAuth2授权中解释OAuth2的授权请求的以后,其请求参数中有 要是 response_type 的参数,其允许的值有 code 和 token 要是,在这要是的基础上,OIDC增加了要是新值 id_token (删改信息定义在http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html):

oauth2 - form-post-response-mode :http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html

4567你这俩次要中重点有要是信息:

当reponse_mode设置为form_post的以后,OIDC则会返回如下的信息:

其中Session Management是OIDC服务自身管理会话的机制;Back-Channel Logout则是定义在纯后端服务之间的这俩取消 机制,应用场景太满,这里要是删改解释了。这里重点关注一下Front-Channel Logout你这俩规范(http://openid.net/specs/openid-connect-frontchannel-1_0.html),它的使用最为广泛,其工作的具体的流程如下(结合Session Management规范)

oauth2 - multiple-response-types :http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html

oidc - front-channel-logout :http://openid.net/specs/openid-connect-frontchannel-1_0.html

在上图中的2和3属于session management你这俩规范的一部。其中第2步中,odic的退出登录的地址是通过Discovery服务中返回的end_session_endpoint字段提供的RP的。其中还有要是check_session_iframe字段则是供纯前端的js应用来检查oidc的登录情況用的。

综合上篇提到的idtoken和前面的discovery服务以及针对oauth2的扩展,则还时要让OIDC服务的RP完成用户认证的过程。这么咋样主动的取消 你这俩认证呢(也要是亲戚亲戚要是人常说的退出登录)?总结来说要是其认证的会话管理,OIDC单独定义了4个独立的规范来完成这件事情:

oidc - session-menagement :http://openid.net/specs/openid-connect-session-1_0.html

笔者基于IdentityServer3和IdentitySever4(两者前会 基于OIDC的要是.NET版本的开源实现)写的要是集成SSO,API访问授权控制,QQ联合登陆(作为OP)的demo:https://github.com/linianhui/oidc.example 。

4567这四步则是属于front-channel logout规范的一次要,OIDC服务的支持情況在Discovery服务中前会 对应的字段描述:

这是要是会在html加载完毕后,通过要是自动提交的form表单,把id_token,access_token,authorization_code原因分析要是的相关数据POST到调用方指定的回调地址上。

在oauth2中,上面的这俩情況是其默认行为,并这么通过参数来显示的控制。OIDC在保持oauth2的默认行为的基础上,增加了要是名为response_mode的参数,以后增加了这俩通过form表单传递信息的土依据,即form_post(删改信息定义在http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html)。OIDC服务对你这俩扩展的支持情況体现在上面提到的Discovery服务中返回的response_modes_supported字段中:

在oauth2的隐式授权流程中,当response_type设置为token的以后,oauth2的授权服务会直接把access_token通过url的fragment次要传递给调用方,比如要是“http://client.lnh.dev/oauth2-callback#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&expires_in=3500”;

本文版权归作者和博客园共有,欢迎转载,但未经作者同意时要保留此段声明,且在文章页面明显位置给出原文连接,以后保留追究法律责任的权利。

在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心次要)中解释了OIDC的核心次要的功能,即OIDC咋样提供id token来用于认证。原因分析OIDC是要是协议族,原因分析要是简单的只关注其核心次要觉得是缺乏以搭建要是删改的OIDC服务的。本篇则解释下OIDC中比较常用的几个相关扩展协议,还时要说是搭建OIDC服务必备的几个扩展协议(在上一篇中有 提到这几个协议规范):

至此OIDC是支持这俩类型的response_type的,不但这么,OIDC还允许了还时要组合你这俩种类型,即在要是response_type中中有 多个值(空格分隔)。比如当参数是要是的以后 response_type=id_token token ,OIDC服务就会把access_token和id_token同時 给到调用方。OIDC对哪几种类型的支持情況体现在上面提到的Discovery服务中返回的response_types_supported字段中:

oidc : http://openid.net/connect/