基于OIDC(OpenID Connect)的SSO

本文详细介绍了基于OIDC协议实现单点登录(SSO)的整个流程,包括OIDC-Client的认证请求、OIDC-Server的验证与登录处理,以及统一退出的步骤。通过.NET平台的IdentityServer4开源实现作为示例,阐述了SSO中涉及的多个独立客户端与认证中心的交互过程,强调了HTTP请求和响应在不同阶段的角色。
摘要由CSDN通过智能技术生成

在[认证授权]系列博客中,分别对OAuth2和OIDC在理论概念方面进行了解释说明,其间虽然我有写过一个完整的示例(https://github.com/linianhui/oidc.example),但是却没有在实践方面做出过解释。在这里新开一个系列博客,来解释其各种不同的应用场景。因为OIDC是在OAuth2之上的协议,所以这其中也会包含OAuth2的一些内容。

OIDC协议本身有很多的开源实现,这里选取的是基于.Net的开源实现基于IdentityServer4。本系列的源代码位于https://github.com/linianhui/oidc.example。clone下来后用管理员身份运行build.ps1来部署整个系统,其中可能会弹出UAC警告(脚本会修改host文件,记得允许管理员读写这个文件先)。部署完后的样子如下:

本文中主要是关注一下SSO这部分的内容,主要是跨一级域单点登录统一登出功能。其中涉及到的站点有一下4个:

  1. oidc-server.dev:利用oidc实现的统一认证和授权中心,SSO站点。

  2. oidc-client-hybrid.dev:oidc的一个客户端,采用hybrid模式。

  3. oidc-client-implicit.dev:odic的另一个客户端,采用implicit模式。

  4. oidc-client-js.dev:oidc的又一个客户端,采用implicit模式,纯静态网站,只有js和html,无服务端代码。

单点登录

通常来讲,SSO包括统一的登录统一的登出这两部分。基于OIDC实现的SSO主要是利用OIDC服务作为用户认证中心作为统一入口,使得所有的需要登录的地方都交给OIDC服务来做。更直白点说就是把需要进行用户认证的客户端中的用户认证这部分都剥离出来交给OIDC认证中心来做。具体的交互流程如下:

其中这三个客户端是完全独立的位于不同的域名之下,且没有任何依赖关系,三者均依赖oidc-server.dev这个站点进行认证和授权,通信协议为HTTP,那么下面则通过它们之间的HTTP消息来解释其具体的流程。这个过程中使用fiddler来进行监视其所有的请求。

第1步:OIDC-Client- 触发认证请求

在浏览器打开oidc-client-implicit.dev这个站点,打开后如下(QQ这个先不管它,后面单独介绍)。

点击Oidc Login后,会触发一个302的重定向操作。具体的HTTP请求和响应信息如下:

Request:Get后面的URL是我们点击Oidc Login的Url,这个URL包含一个参数,代表登录成功后所要回到的页面是哪里。

Response:服务器返回了一个302重定向。

  1. Location的Url指向了oidc-server.dev这个站点,其中还携带了一大堆参数(参数后面一小节介绍);

  2. Set-Cookie设置了一个nonce的cookie,主要目的用于安全方面。

第2步:OIDC-Client - 认证请求

紧接上一步,浏览器在接收到第1步的302响应后,会对Location所指定的URL发起一个Get请求。这个请求携带的参数如下:

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值