Keycloak如何确定新浏览器窗口中的用户?

问题描述

我试图弄清楚以下问题:

有:

  • app1.gatekeeper-test.com
  • app2.other-url.com

这两个客户端(app1,app2)位于同一领域(在2个Gatekeeper的保护下) 两者都指向同一个资源服务器-Cookies已完全作用域。

  1. 我以user1的身份登录app1.gatekeeper-test.com
  2. 我在新标签页中打开app2.other-url.com,它以user1的身份自动登录
  3. 如果我在私人窗口中打开app1.gatekeeper-test.com,则需要再次登录
  4. 没有什么是全局范围的,我无法找到keycloak确定用户的原因。

这怎么可能?必须有一些让Keycloak知道的Frontend-State-Mechanism,这是user1,它正在尝试访问app2?我很困惑...(在Chrome 80.0.3987.87上测试)

解决方法

这就是SSO的工作方式,它是在浏览器标签之间共享的浏览器会话UUID。

一旦您从新标签页重定向到keycloak,它就会通过浏览器会话检测到该会话在同一领域中已经有经过身份验证的用户,因此它会向您返回令牌。

在隐身窗口中,您有一个新的会话UUID,因此您将需要重做身份验证机制,并且即使它是同一用户,也将获得具有不同到期时间的其他令牌。