Spring OAuth2 - 授权服务器如何使用两个客户端实例处理安全上下文?

时间:2017-12-12 15:09:57

标签: spring spring-mvc spring-security oauth-2.0 spring-security-oauth2

我目前正在研究两个OAuth2 Spring Client( A B )实例联系同一AuthorizationServer( C )的情景。在Chrome上使用两个窗口时,一个正常,一个处于隐身模式,这样可以正常工作。

A B 联系 C ,我可以使用两个不同的帐户登录,并且用户端点返回正确的Principal给予用户。

但是,如果我在 A 的同一浏览器窗口中切换客户端,并在 B 上调用登录路径,则不会提示登录屏幕,我是立即以 A 的窗口中的相同用户身份登录, B

我已经检查过这是否是由于cookie,但似乎并非如此。我无法理解不与 A 通信的 B 如何知道发送正确的令牌并检索那些 C 的安全数据已连接到 A 。我已经在Incognito和normal上尝试了这个,两次都返回了另一个校长。

总之,我的问题是: B 如何发送连接到 A C 登录过程的数据,反之亦然相同的浏览器会话?

1 个答案:

答案 0 :(得分:0)

  

但是,如果我在同一浏览器窗口中从A切换客户端,并且   在B上调用登录路径,不提示登录屏幕,我是   立即以A,on窗口中的同一用户身份登录   乙

坦率地说,这是因为在您登录时,access_token生成的客户端凭据与用于识别客户端(用于区分是否来自A或B的登录请求)之间没有任何关系。它只在生成access_token时很重要。

在一个简单的情况下,用户X通过网站请求OAuth2 Bearer access_token,而Iphone将导致生成2个唯一的access_token,并在服务器后端保留。

如果用户X以某种方式获取在网站中生成的access_token并在标题中使用它

Authorization: Bearer <Website Generated access_token>

在调用受保护的端点时,用户X将不会是401或403,因为发送的access_token实际上在后端服务器中可用。仅验证access_token是否仍然有效(将不会过期)。