一次性注销 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 客户端元数据设为 true。 对于 IBM Verify ,当您在管理用户界面配置 OpenID 应用程序时,该设置在登录选项卡上可用。 滚动到 " 单次注销设置 "部分,选择 " 需要会话 "复选框。 应用程序可以使用这些信息来验证请求,并确定要注销哪些会话。 如果 sid 与授权服务器 (OP) 的当前或最近会话不匹配,应用程序可能会忽略注销请求。
注: OIDC 前通道注销建议使用 调用 iframe 前通道注销端点。 现代浏览器默认阻止第三方 cookie 在 iframe 中转发。 如果应用程序的域与授权服务器的域不同,它就不会收到任何 cookie,这可能会导致应用程序无法正确注销用户。 用户需要将浏览器配置为允许授权服务器域的第三方 cookies。
后方通道注销
后向通道注销或服务器端注销是单次注销(SLO)的一种方法,在这种方法中,身份提供商( IdP )直接与服务提供商(SP)通信,使用户会话失效。 这通常是通过 IdP 和 SP 在初始验证过程中建立的安全通道来实现的。 使用后端机制时,授权服务器 (n) 会通过直接后端 API 向应用程序的注销端点执行 HTTP POST。 授权服务器会发出一个注销 JWT 标记,其中包含以下信息。
声明名称 用法 描述
iss 必需 发行人标识符。
sub 可选 主题标识。 sid 时必须存在。
aud 必需 观众。
iat 必需 发布时间
exp 必需 有效期。
jti 必需 令牌的唯一标识符。
events 必需 包含成员名称的 JSON 对象 http://schemas.openid.net/event/backchannel-logout
sid 可选 会话标识符。 sub 时必须存在。
授权服务器 (OP) 使用相同的配置对注销 JWT 令牌和 ID 令牌进行签名、加密或两者兼用。
在应用程序-依赖方(RP)发起的注销场景中,应用程序通过重定向到授权服务器的 end_session_endpoint 来触发注销,授权服务器的 发布在授权服务器的发现端点中。 应用程序可能会发送以下请求参数。
参数名 用法 描述
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。 否则,授权服务器将显示注销摘要报告。
提示: 如果要创建自定义应用程序注销端点、
前置通道注销
Verify 希望应用程序注销端点在 3 秒内做出响应。
用于反向通道注销
  • Verify 希望端点返回 2xx 表示成功,400 表示出错。
  • Verify 希望应用程序注销端点在 3 秒内做出响应。
  • 为了更快地验证 JWT 注销令牌,应用程序注销端点会缓存 Verify JWKS 端点。