gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:22:18 27 4
gpt4 key购买 nike

基于 cookie 的 session 的性质和 状态 OAuth2 身份验证代码流中的参数处理暴露了一个问题,当新的浏览器 session 以多个选项卡启动时,尝试同时打开“安全服务器”(我们的 Oauth2 secret 客户端)上的多个链接。
当浏览器启动时,它会丢弃所有以前的 session cookie。在崩溃恢复的情况下,浏览器或用户可以从书签文件夹或历史记录中一次打开多个选项卡。
在这种情况下,所有选项卡将同时向安全服务器发送未经身份验证的请求。每个请求将开始一个新的 session 和一个新的身份验证代码流,新的 状态 param,将保存在此 session 中。
所有 Secure Server 的重定向到身份提供程序的响应都将带有一个具有相同名称但不同值的 session cookie。它们会在浏览器中相互覆盖,浏览器只保留最后一个作为 session ID。
每个选项卡将沿着授权代码流向下继续到身份提供商登录页面并返回到安全服务器,带有不同的 状态 param,但相同的 session cookie(由最后一个选项卡设置)。
那些状态参数保存在现在丢失的 session 中,无法验证。 国家禁止参数验证失败,并发出错误403。
结果是除最后一个之外的所有选项卡都在 403 页面上结束。
是否有任何已知的做法来处理这个问题?
谢谢

最佳答案

有趣的问题,在大多数情况下,这将是开始工作的挑战,并且需要以下方面的支持:

  • 客户端 OAuth 库
  • 授权服务器

  • 兼容库
    oidc-client-js库通过 演示了所需的技术国营店每个重定向。正如您所说,最后一个人将获胜,最终用户不会出现任何错误。
    它是客户端 Web UI 比服务器端 Web 堆栈(例如 ASP.Net/Spring Boot)触发的重定向具有更大控制权的可用性领域之一。
    行为可视化
    运行我的 Online OAuth SPA并触发 2 个重定向,但不要登录。然后浏览到这个 URL 并在重定向状态下查看浏览器的本地存储工具:
  • https://web.authsamples.com/spa/#loggedout

  • enter image description here
    最后获胜的人将更新 用户存储 ,其数据用于后续续订重定向和 token 验证(请注意,我的 SPA 将实际 token 存储在内存中而不是此用户存储中):
    enter image description here
    不合规的授权服务器
    不幸的是,我的在线授权服务器 (AWS Cognito) 不喜欢像这样接收 2 次登录并且第二次登录失败。
    enter image description here

    关于oauth - 授权代码流 - 来自多个选项卡的并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65493296/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com