我目前正在研究两个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 登录过程的数据,反之亦然相同的浏览器会话?
答案 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是否仍然有效(将不会过期)。