我对 Keycloak 的配置和 SAML 身份提供者的单次注销有疑问。
设想:
- 用户尝试使用 Keycloak 的客户端 (OID) 登录服务提供商
- KC 重定向到 SAML 身份提供者
- 输入正确的凭据,用户登录,KC 创建会话,用户被重定向回 SP 页面
- 在另一个选项卡中,用户直接登录 IP(由于 SSO,不需要凭据)
- 用户从 SP 注销
- 刷新第二个选项卡(IP)后,用户退出。
但是,如果用户先从 IP 注销,SP 会话不会关闭,用户仍处于登录状态:
- 用户从 IP 注销(重定向到 KC 端点并返回 IP 登录页面)
- 刷新后,用户仍然登录SP
Keycloak 正确接收 samlp:LogoutRequest 请求并返回 <samlp:LogoutResponse ... samlp:Status<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status> </samlp:LogoutResponse>
在 KC 管理控制台中,我仍然可以看到给定客户端(和用户)的活动会话。实际上,我只能在 KC 标准输出(请求转储器过滤器)中看到来自 IP 的 SAML 注销请求,但在 KC 中没有发生注销事件。
我不太了解 SAML 的工作原理,但不应该是用户使用 SLO 从 SP 注销?或者,也许我在 KC 的客户端/领域/IP 配置中遗漏了一些东西?感谢您的帮助/解释