我需要了解在OAuth2-授权代码流授予期间如何避免或如何管理粘性会话,尤其是在以下期间: GET / uaa / oauth / authorize,POST / uaa / login,然后再次GET / uaa / oauth / authorize
我们的身份验证服务仅服务于我们拥有的两个Web应用程序,每个Web应用程序都是一台资源服务器,用于检查令牌和有效性。如果没有令牌或令牌无效,它们将直接重定向到Auth Server登录页面(真正告诉第一个调用GET / oauth / authorize)。
授权代码流授权需要执行以下步骤:
-首次调用以注册客户端请求GET / uaa / oauth / authorize,并在会话中存储(在我的情况下为Spring Redis)一些信息,例如客户端的callbackurl
-通过用户凭证POST / login登录第二次呼叫
-第三次调用以获得ACCESS_CODE GET / uaa / oauth / authorize,从会话中检索回调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
春季会议变得混乱。例如:
我尝试自定义SessionRepository失败,但是将其他服务与Oauth2结合使用时,我开始相信我至少需要每个Web应用程序中的一页,在第一次调用GET / oauth / authorize之前进行代理
是否有最佳实践建议来避免这种流程引起的麻烦?
还是不用HTML页面即可管理多个标签的某种方法? Spring-Security默认使用粘性会话。
谢谢您的时间。
答案 0 :(得分:0)
我最终实现了像nonce这样的东西,默认情况下不受Spring安全支持(据我所知Github Spring Security)。
如果用户尝试使用与最新随机数不同的随机数进行身份验证,我会将他踢到错误页面,并显示诸如“登录会话已过期”之类的消息,并带有指向Web应用程序的链接。