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_requiredclient metadata 设置为 true。 IBM Verify因为,当您在管理界面中配置 OpenID 应用程序时,该设置位于 “登录 ”选项卡下。 滚动至 “单次注销设置 ”部分,然后选中 “需要会话 ”复选框。 该应用程序可以利用这些信息来验证请求,并确定需要注销哪些会话。 如果 与授权服务器(OP)的sid当前或最近会话不匹配,应用程序可能会忽略注销请求。iframe注意: OIDC 前通道注销建议使用 来调用前通道注销端点。iframe现代浏览器默认会阻止第三方 Cookie 的传输。 如果应用程序的域名与授权服务器的域名不同,则应用程序将无法接收任何 Cookie,这可能会导致应用程序无法正确注销用户。 用户需要配置浏览器,允许授权服务器域名的第三方 Cookie。 - 后台通道注销
- 后台通道注销或服务器端注销是一种单点注销(SLO)方法,其中身份提供商( IdP )直接与服务提供商(SP)通信,以使用户的会话失效。 这通常是通过在初始身份验证过程中,由 IdP 与SP之间建立的安全通道来实现的。 使用后通道机制时,授权服务器 (n) 会通过直接后通道 API 向应用程序的注销端点发送 HTTP POST 请求。 授权服务器会签发一个包含以下信息的注销 JWT 令牌。
授权服务器(OP)使用与 ID 令牌相同的配置来对注销 JWT 令牌进行签名、加密或两者兼而有之。声明名称 用法 描述 iss必需 发行人标识符。 sub可选 主题标识。 当 sid不存在时,必须存在。aud必需 受众或受众群体。 iat必需 发布于当时。 exp必需 到期时间。 jti必需 该令牌的唯一标识符。 events必需 http://schemas.openid.net/event/backchannel-logout包含成员名称的 JSON 对象。 sid可选 会话标识符。 当 sub不存在时,必须存在。
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 端点。