0

我对 Keycloak 的配置和 SAML 身份提供者的单次注销有疑问。

设想:

  1. 用户尝试使用 Keycloak 的客户端 (OID) 登录服务提供商
  2. KC 重定向到 SAML 身份提供者
  3. 输入正确的凭据,用户登录,KC 创建会话,用户被重定向回 SP 页面
  4. 在另一个选项卡中,用户直接登录 IP(由于 SSO,不需要凭据)
  5. 用户从 SP 注销
  6. 刷新第二个选项卡(IP)后,用户退出。

但是,如果用户先从 IP 注销,SP 会话不会关闭,用户仍处于登录状态:

  1. 用户从 IP 注销(重定向到 KC 端点并返回 IP 登录页面)
  2. 刷新后,用户仍然登录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 配置中遗漏了一些东西?感谢您的帮助/解释

4

1 回答 1

2

全局注销工作的要求

  • 被两个服务提供者使用的客户端应该在同一个领域。
  • 当您从 IdP 注销时,您是否看到每个服务提供商都发出了注销请求?我相信在您的情况下,它不会为您的 SP 调用 Logout URL。这需要在客户端级别进行配置。
  • 如果正在调用 SP 的注销 URL,并且即使您已登录到您的 SP,则意味着 SP 在执行注销时存在一些问题。

在这种情况下,当您首先从 SP 注销时,您的 SP 正在向 IdP 发送注销请求,这就是您从 IdP 和 SP 注销的原因。但在另一种情况下,我相信没有调用注销 URL(这可能是由于客户端中缺少配置)。

您可以发布配置的屏幕截图以更好地帮助您吗?

于 2020-08-08T09:19:35.263 回答