[译] IdentityServer3 单点登出

何兴安
2023-12-01

原文:Single sign-out and IdentityServer3

单点登出 (single sign-out, single logout, SLO) 是指用户能够登出所有使用单点登录 (single sign-on, SSO)包括身份提供商登进的应用的机制。OpenID Connect 规范系列包含了 三个 不同的关于怎么处理单点登出的规范。每一个都提供了不一样的方式来解决引入 SSO 的应用架构特性所带来的问题。有三种不同的方式来解决这个问题可见执行单点登出的复杂性。

其中一个就是“会话管理规范”,针对的是基于 JavaScript / SPA 风格的应用(因此也称为基于 JavaScript 的登出规范)。另一个是“基于 HTTP 的登出规范”,针对的是服务器端框架(比如 ASP.NET),也称为 "front-channel" 方式。最后一个是“back-channel 登出规范”,也是针对服务器端应用的,但是采取的是不同于 "front-channel" 规范的方式。每一个都有利有弊。

IdentityServer3 首次发布就对基于 JavaScript 的“会话管理规范”提供了支持,并在 2015 年 11 月 v2.2 中也实现了 "front-channel" 规范的支持。

基于 JavaScript 的方式需要客户端应用加载一个连到在 IdentityServer 中称为 "check_seesion_iframe" 端点(它的值在元数据端点中可以找到)的 <iframe> 。这个 <iframe> (鉴于它是来自 IdentityServer 的源)可以访问到由 IdentityServer 管理的会话 cookie 并且可以侦测用户登录会话的改变(也就是用户的登出或者其他用户登录)。一旦用户会话发生了改变,那么托管 <iframe> 的 JavaScript 应用将会得到用户不再登录到 IdentityServer 的通知。在此阶段,接下来该怎么做就交给了应用,但是应用至少知道用户的登录状态已经发生了改变。

"front-channel" 规范采用了另一个方式。它允许客户端应用使用 IdentityServer 预先注册一个 "logout URL" 。当用户登出 IdentityServer ,然后在 IdentityServer 的 "sign out" 页面上,一个 <iframe> 会渲染客户端应用注册的 "logout URL" 。<iframe> 中的请求允许客户端应用接收在用户浏览器会话上下文中用户已经登出的通知。在这个请求中,客户端应用可以决定怎么来清除用户的会话,常用的方式就是撤销客户端应用中的用户会话 cookie 。

你可以在 这里 获取更多 IdentityServer 关于单点登出的支持。

 类似资料: