OIDC 应用程序的单点注销

通过单点注销(SLO),用户可以同时从所有单点登录应用程序中注销。 此功能通过防止未经授权的用户访问任何残留会话来增强安全性,尤其是在设备与他人共用时。

在实现单点注销(SLO)功能时,系统中存在三种会话。
申请环节
尽管该应用程序使用 OpenID (OP)对用户进行身份验证,但它可能会追踪登录该应用程序的用户。 通常,应用程序会通过浏览器 Cookie 来跟踪会话。 该应用程序负责在用户注销时清除会话。
授权服务器 OpenID 提供程序 (OP) 会话
授权服务器还会维护用户会话,并将其存储在 Cookie 中。 授权服务器会在用户注销时清除用户会话,同时清除与该用户会话相关的授权和令牌。
身份 来源 会话
用户可以使用来自身份源的用户会话进行登录。 在注销过程中,用户可能还希望从该用户会话中注销。
注意: 单点注销不支持从身份提供商会话中注销。 此外,它也不支持从 SAML 应用程序中注销。 尽管 SAML 提供了一个用于执行 IdP-initiated 以及由服务提供商(SP)发起的注销操作的类似端点,但它并未与 OIDC 单点注销功能集成。

授权服务器(OP)通知应用程序已触发注销操作有两种机制:前向通道和后向通道。 在这两种机制中,应用程序都会注册一个注销端点,授权服务器会调用该端点。 此端点封装了应用程序用于清除其会话的代码。 调用应用程序的注销端点并不可靠,因为 没有义务进行 IBM® Verify 重试,也没有义务确保应用程序成功清除其会话。 后端通道注销是首选机制。

前通道注销
前端注销或客户端注销是一种单点注销(SLO)方法,其中客户端(通常是网页浏览器)直接与服务器通信,以使用户的会话失效。 通常的做法是向服务器发送请求,以删除会话 Cookie 或令牌。 随后,服务器会发送响应以确认注销。 这种方法简单明了,在单域名场景下效果良好。 然而,由于跨源通信和安全方面可能存在的问题,它可能不适用于复杂、多域或多协议的环境。 当您使用前端通道机制时,授权服务器 (OP) 会在 <iframe src="frontchannel_logout_uri"> 页面中渲染 ,以触发对应用程序注销端点的 调用 HTTP GET 。 应用程序可以请求授权服务器将会话 ID (sid) 和签发者 (iss) 信息作为额外的查询参数发送。 如果应用程序客户端是通过动态客户端注册创建的,请将 frontchannel_logout_session_required client metadata 设置为 true。 IBM Verify因为,当您在管理界面中配置 OpenID 应用程序时,该设置位于 “登录 ”选项卡下。 滚动至 “单次注销设置 ”部分,然后选中 “需要会话 ”复选框。 该应用程序可以利用这些信息来验证请求,并确定需要注销哪些会话。 如果 与授权服务器(OP)的 sid 当前或最近会话不匹配,应用程序可能会忽略注销请求。
iframe 注意: OIDC 前通道注销建议使用 来调用前通道注销端点。 iframe现代浏览器默认会阻止第三方 Cookie 的传输。 如果应用程序的域名与授权服务器的域名不同,则应用程序将无法接收任何 Cookie,这可能会导致应用程序无法正确注销用户。 用户需要配置浏览器,允许授权服务器域名的第三方 Cookie。
后台通道注销
后台通道注销或服务器端注销是一种单点注销(SLO)方法,其中身份提供商( IdP )直接与服务提供商(SP)通信,以使用户的会话失效。 这通常是通过在初始身份验证过程中,由 IdP 与SP之间建立的安全通道来实现的。 使用后通道机制时,授权服务器 (n) 会通过直接后通道 API 向应用程序的注销端点发送 HTTP POST 请求。 授权服务器会签发一个包含以下信息的注销 JWT 令牌。
声明名称 用法 描述
iss 必需 发行人标识符。
sub 可选 主题标识。 当 sid 不存在时,必须存在。
aud 必需 受众或受众群体。
iat 必需 发布于当时。
exp 必需 到期时间。
jti 必需 该令牌的唯一标识符。
events 必需 http://schemas.openid.net/event/backchannel-logout包含成员名称的 JSON 对象。
sid 可选 会话标识符。 当 sub 不存在时,必须存在。
授权服务器(OP)使用与 ID 令牌相同的配置来对注销 JWT 令牌进行签名、加密或两者兼而有之。
end_session_endpoint在由应用程序依赖方(RP)发起的注销场景中,应用程序通过重定向至授权服务器的 来触发注销,该 发布在授权服务器的发现端点上。 该应用程序可能会发送以下请求参数。
参数名 用法 描述
id_token_hint 建议 授权服务器签发的 ID 令牌,用于提示用户与应用程序之间的经过身份验证的会话。
logout_hint 可选 向授权服务器提供有关正在注销用户的提示。
client_id 可选 该应用程序的客户端标识符。
post_logout_redirect_uri 可选 应用程序请求在用户注销后将其用户代理重定向到的 URI。
state 可选 一个不透明的值,应用程序用于在注销请求与对端点的 post_logout_redirect_uri 回调之间维护状态。
ui_locales 可选 用户对用户界面的首选语言和字符集。
如果未指定 id_token_hint ,或者 ID 令牌不属于当前登录的用户,授权服务器会询问用户是否要清除授权服务器会话。 接下来,与由 OP 发起的注销场景类似,授权服务器会查找出曾使用同一授权服务器(OP)会话登录的应用程序列表。 它通过使用其中一种通道注销机制来通知应用程序。 然后,如果用户给予同意,授权服务器将清除其自身的会话。 如果指定了该 post_logout_redirect_uri URI 且能够根据客户端配置进行验证,则在注销过程结束时,系统将重定向至该 URI。 否则,授权服务器将显示注销摘要报告。
提示: 如果您正在构建自定义应用程序的注销端点,
用于前置声道注销
Verify 期望应用程序的注销端点在3秒内做出响应。
用于后台通道注销
  • Verify 预期该接口在成功时返回 2xx ,出现任何错误时返回400。
  • Verify 期望应用程序的注销端点在3秒内做出响应。
  • Verify 为了更快地验证 JWT 注销令牌,应用程序的注销端点会缓存 JWKS 端点。