Oauth 授权代码流-来自多个选项卡的并发请求
OAuth2身份验证代码流中基于cookie的会话和状态的参数处理的性质暴露了一个问题,当新浏览器会话启动时,多个选项卡试图同时打开“安全服务器”(我们的OAuth2机密客户端)上的多个链接 当浏览器启动时,它将丢弃所有以前的会话cookie。在崩溃恢复时,浏览器可以一次打开多个选项卡,用户也可以从书签文件夹或历史记录中打开多个选项卡 在这种情况下,所有选项卡将同时向安全服务器发送未经验证的请求。每个请求都将启动一个新会话和一个新的身份验证代码流,其中包含新的状态参数,该参数将保存在此会话中 所有Secure Server重定向到标识提供程序的响应都将包含一个具有相同名称但值不同的会话cookie。它们将在浏览器中相互覆盖,并且浏览器只保留最后一个作为会话ID 每个选项卡将继续沿着授权代码流,进入身份提供商登录页面并返回安全服务器,带有不同的状态参数,但具有相同的会话cookie(由最后一个选项卡设置) 那些状态参数保存在现已丢失的会话中,无法验证状态禁止参数验证失败,并发出错误403 结果是,除最后一个选项卡外,所有选项卡都结束在403页上 是否有任何已知的做法来处理此问题Oauth 授权代码流-来自多个选项卡的并发请求,oauth,state,single-sign-on,session-cookies,browser-tab,Oauth,State,Single Sign On,Session Cookies,Browser Tab,OAuth2身份验证代码流中基于cookie的会话和状态的参数处理的性质暴露了一个问题,当新浏览器会话启动时,多个选项卡试图同时打开“安全服务器”(我们的OAuth2机密客户端)上的多个链接 当浏览器启动时,它将丢弃所有以前的会话cookie。在崩溃恢复时,浏览器可以一次打开多个选项卡,用户也可以从书签文件夹或历史记录中打开多个选项卡 在这种情况下,所有选项卡将同时向安全服务器发送未经验证的请求。每个请求都将启动一个新会话和一个新的身份验证代码流,其中包含新的状态参数,该参数将保存在此会话中 所
谢谢这是一个有趣的问题,在大多数情况下,这将是一个工作上的挑战,并将得到以下方面的支持:
- 客户端OAuth库
- 授权服务器
这似乎是一个类似的问题。但在您的情况下,错误来自身份验证服务器(或身份提供程序)-不清楚它失败的原因,因为as与重定向状态参数无关,它应该只将其传输回代码流启动器。我使用具有不同名称的cookie,并将cookie名称置于状态,安全服务器使用状态中的cookie名称来获取指定的cookie。因此,换句话说,您将状态放入cookie名称中。(您在这个cookie值中输入了什么?可能返回URL?)那么如何验证状态?检查是否有一个名为state的cookie?如果是这样,则比较两个令牌,这两个令牌都是由客户机提供的。这不是不安全吗?如果在状态中对随机值进行单向散列,有什么可以阻止攻击者替换cookie值及其在状态参数中的散列?谢谢你的提示,散列无效,我最初的想法是错误的。考虑到代码被盗,它似乎无法阻止攻击者使用自己的状态和cookie替换它们。我正在努力寻找更多的信息。现在,我想。代码被盗的责任将属于Auth服务器(代码只能使用一次,如果重复使用,所有令牌将被撤销)。此外,关于原始并发性问题,我发现了类似的答案,使用随机值作为密钥。