【发布时间】:2018-05-26 07:48:11
【问题描述】:
我目前正在处理 OAuth2 Spring 客户端(A 和 B)的两个实例联系同一个 AuthorizationServer (C) 的场景。在 Chrome 上使用两个窗口时,一个正常,一个在隐身模式下,这工作正常。
A 和 B 都联系 C,我可以使用两个不同的帐户登录,并且用户端点返回正确的 Principal 和给定用户。
但是,如果我从A在同一个浏览器窗口中切换客户端,并在B上调用登录路径,登录界面没有提示,我是立即以 B 上 A 窗口中的同一用户身份登录。
我检查了这是否是由于 cookie 造成的,但似乎并非如此。我无法理解不与 A 通信的 B 如何知道发送正确的令牌并检索来自 C 的安全数据连接到 A。我在隐身模式和普通模式都试过这个,两次都返回了另一个主体。
总而言之,我的问题是:B 如何发送连接到 A 和 C 的登录过程的数据,反之亦然相同的浏览器会话?
【问题讨论】:
-
客户端都是使用 Spring 框架用 Java 编写的。我正在使用
OAuth2ClientAuthenticationProcessingFilter和ResourceServerTokenServices的自定义实现 -
我发现在通信过程中确实有一个
JSESSIONID被创建。一旦我切换了cookie并尝试登录,我就切换了用户。我错过了这个,因为我们应用程序的其他部分也创建了这个 cookie,并认为它只是另一个 cookie。
标签: spring spring-mvc spring-security oauth-2.0 spring-security-oauth2