gpt4 book ai didi

java - 授权码流程和多个选项卡

转载 作者:行者123 更新时间:2023-11-30 05:38:38 24 4
gpt4 key购买 nike

我需要了解如何避免或如何管理 OAuth2 - 授权代码流授予期间的粘性 session ,特别是在以下期间:GET/uaa/oauth/authorize,POST/uaa/login 并再次 GET/uaa/oauth/authorize

我们的身份验证服务将只为我们拥有的两个网络应用程序提供服务,每个应用程序都是一个资源服务器,用于检查 token 和有效性。如果没有 token 或 token 无效,它们将直接重定向到 Auth 服务器登录页面(真正告诉第一次调用,GET/oauth/authorize)。

授权码流授权需要以下步骤:

-第一次调用注册客户端请求 GET/uaa/oauth/authorize,在 session 中存储一些信息(在我的例子中是 Spring Redis),例如客户端的回调url

-通过用户凭据 POST/login 第二次调用登录

-第三次调用获取 ACCESS_CODE GET/uaa/oauth/authorize,从 session 中检索回调 URL。

但是,如果我伪造来自两个不同客户端的两个请求,在同一浏览器上打开两个不同的选项卡怎么办?

例如:

http://localhost:9191/uaa/oauth/authorize?response_type=code&client_id=client-one&scope=auth&redirect_uri=http://localhost:8080/client-one

另一个是:

localhost:9191/uaa/oauth/authorize?response_type=code&client_id=client-two&scope=auth&redirect_uri=http://localhost:8080/client-two

Spring session 变得困惑。例如:

  • 在 Tab1 上打开 WebApp1,然后在 Tab2 上打开 WebApp2。
  • 登录 Tab1 将重定向到 WebApp2 重定向 uri。
  • 然后登录 Tab2 将返回到/uaa/导致 404。

我尝试自定义 SessionRepository 但没有成功,但是使用 Oauth2 的其他服务我开始相信每个 web 应用程序中至少需要一个页面,在第一次调用 GET/oauth/authorize 之前进行代理.

是否有任何最佳实践建议可以避免此流程的粘性 session ?

或者有什么方法可以在没有 html 页面的情况下管理多个选项卡? Spring-Security 默认使用粘性 session ..

感谢您的宝贵时间。

最佳答案

我最终实现了类似随机数的东西,默认情况下 Spring Security 不支持(据我所知 Github Spring Security )。

如果用户尝试使用与最新随机数不同的随机数进行身份验证,我会将他踢到错误页面,并显示一条类似“登录 session 已过期”的消息,并带有指向 Web 应用程序的链接。

关于java - 授权码流程和多个选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56153363/

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