小编Lip*_*ier的帖子

授权代码流程 - 来自多个选项卡的并发请求

当新的浏览器会话启动时,多个选项卡试图同时打开“安全服务器”(我们的 Oauth2 机密客户端)上的多个链接,OAuth2 身份验证代码流中基于 cookie 的会话和状态参数处理的性质会暴露出一个问题。

当浏览器启动时,它会丢弃所有以前的会话 cookie。在崩溃恢复的情况下,浏览器可以一次打开多个选项卡,或者用户可以从书签文件夹或历史记录中一次打开多个选项卡。

在这种情况下,所有选项卡将同时向 Secure Server 发送未经身份验证的请求。每个请求将启动一个新会话和一个新的身份验证代码流,以及新的状态参数,这些参数将保存在此会话中。

所有 Secure Server 的重定向到身份提供商的响应都将带有一个名称相同但值不同的会话 cookie。它们在浏览器中会互相覆盖,浏览器只保留最后一个作为Session ID。

每个选项卡将继续沿着授权代码流程到达身份提供商登录页面并返回安全服务器,具有不同的状态参数,但具有相同的会话 cookie(由最后一个选项卡设置)。

这些状态参数保存在现在丢失的会话中,无法验证。禁止状态参数验证失败,并发出 403 错误。

结果是除了最后一个选项卡之外的所有选项卡都以 403 页面结束。

是否有任何已知的做法可以处理这个问题?

谢谢

state oauth session-cookies single-sign-on browser-tab

5
推荐指数
1
解决办法
1351
查看次数