单一注销不适用于多个 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...