如何解决单一注销不适用于多个 SP - Spring Security SAML
我有 Springboot
应用充当 SP,通过遵循 this example 构建。以下是我的用例 -
- 使用
Keycloak
作为 IDP。 - 在 3030 端口启动了 SP-1,其 EntityId 为
login-app-one
。 - 在端口 4040 上启动了 SP-2,其 EntityId 为
login-app-two
。 - 在
Keycloak
中将这两个实例注册为同一领域中名为demo
的两个客户端。 - 在 Keycloak 中创建了虚拟用户。
- 已成功登录 SP-1。
- 已成功登录 SP-2。
- 我可以看到在 Keycloak 管理控制台中创建了两个会话。
- 从 SP-1 尝试
Global logout
,Keycloak 会话仍处于活动状态。 - 从 SP-2 尝试
Global logout
,Keycloak 会话仍然有效。 - 有时,在从 Keycloak 重定向后,从 SP-2 进行全局注销会使我进入 SP-1。这很奇怪。 (找到这种行为的原因,下面是我的更新)
这里要注意的重要一点是,如果我只有一个 SP 登录,全局注销工作正常。我正在尝试使用多个 SP 实现简单的 SSO 和 SLO,但它不起作用。
我怀疑问题出在我的 Spring SAML
应用上。我在 Springboot 控制台上没有看到任何错误。
更新:
- 如果 springboot 应用程序托管在某个域上,则 SLO 运行良好。我在 docker 容器上部署了 Springboot 应用程序和 keycloak 服务器的两个实例(使用 https://labs.play-with-docker.com/)。所以现在的问题是为什么它不适用于
localhost
。 - 注销 SP-1 使我进入 SP-2,因为在我的 Keycloak 服务器的客户端设置中启用了
Front Channel logout
选项。因此,Keycloak 通过浏览器重定向将所有客户端一一注销。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。