微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单一注销不适用于多个 SP - Spring Security SAML

如何解决单一注销不适用于多个 SP - Spring Security SAML

我有 Springboot 应用充当 SP,通过遵循 this example 构建。以下是我的用例 -

  1. 使用 Keycloak 作为 IDP。
  2. 在 3030 端口启动了 SP-1,其 EntityId 为 login-app-one
  3. 在端口 4040 上启动了 SP-2,其 EntityId 为 login-app-two
  4. Keycloak 中将这两个实例注册为同一领域中名为 demo 的两个客户端。
  5. 在 Keycloak 中创建了虚拟用户
  6. 已成功登录 SP-1。
  7. 已成功登录 SP-2。
  8. 我可以看到在 Keycloak 管理控制台中创建了两个会话。
  9. 从 SP-1 尝试 Global logout,Keycloak 会话仍处于活动状态。
  10. 从 SP-2 尝试 Global logout,Keycloak 会话仍然有效。
  11. 有时,在从 Keycloak 重定向后,从 SP-2 进行全局注销会使我进入 SP-1。这很奇怪。 (找到这种行为的原因,下面是我的更新)

这里要注意的重要一点是,如果我只有一个 SP 登录,全局注销工作正常。我正在尝试使用多个 SP 实现简单的 SSO 和 SLO,但它不起作用。

我怀疑问题出在我的 Spring SAML 应用上。我在 Springboot 控制台上没有看到任何错误

更新

  1. 如果 springboot 应用程序托管在某个域上,则 SLO 运行良好。我在 docker 容器上部署了 Springboot 应用程序和 keycloak 服务器的两个实例(使用 https://labs.play-with-docker.com/)。所以现在的问题是为什么它不适用于 localhost
  2. 注销 SP-1 使我进入 SP-2,因为在我的 Keycloak 服务器的客户端设置中启用了 Front Channel logout 选项。因此,Keycloak 通过浏览器重定向将所有客户端一一注销。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。