关于单点登录平台 oauth2 授权的实现方案中验证授权信息保存的问题

2025 年 11 月 6 日
 wangyzj
正在做一个企业内部单点登录平台,也就是 idaas

本来以为后端 api 给我获取到的 token 等授权信息

前端自己存起来就可以了


但后端这次方案使用了 Response 带 cookie ,前端调用 api 后直接作为只读 cookie 存在了前端

然后产生了 302 跳转登录页

我之前没这么做过,想咨询各位彦祖,哪种方案算是最佳实践

前端为 react 单页应用
后端应该是 springboot

多谢
2565 次点击
所在节点    程序员
17 条回复
c3de3f21
2025 年 11 月 6 日
如果是携带 cookie 不用前端做事的情况下
抓一个时间点,初次访问页面时尝试请求 user ,请求到 user 继续下面的流程
请求不到 user 和后端协商,是你跳登录还是后端跳登录
登录时候肯定携带了你的页面 url 走的,登录完了跳回来还是走 /user 请求
然后正常流程设置系统信息,用户信息菜单权限等等
wangyzj
2025 年 11 月 6 日
@c3de3f21 #1 基本流程是这样的,但我就是想知道后端来处理跳转和 cookie 这个方案好么?
Oktfolio
2025 年 11 月 6 日
对于不同类型的应用实现不同的逻辑,如果是 SPA 就接口 401 的时候前端跳转,如果是传统网页就后端跳转。当然,也不一定要根据类型,反正做成可配置的就好。
Oktfolio
2025 年 11 月 6 日
SPA 做前端跳转,是因为前端跳转可以带上自己需要的参数,这样登录后就可以根据参数跳转回之前的页面了
LittleFox
2025 年 11 月 7 日
如果前后端同源的话会自动处理 cookie 吧?不同源可能需要手动处理一下,感觉前后端不同源还是用 token 或者 jwt 舒服一点
wangyzj
2025 年 11 月 7 日
@LittleFox #5 理论上要考虑不同源场景,毕竟不知道别的应用是什么域
cus
2025 年 11 月 7 日
oauth2 bff 方案咯,公开的 client 被 SPA 用现在也被视为有风险的。没有不同源场景,逻辑是你不和 idaas 一个源,你和 bff 才是一个源。https://datatracker.ietf.org/doc/html/draft-ietf-oauth-browser-based-apps
mmmNover
2025 年 11 月 7 日
cookie 把,operas/cas 项目的标准方案
c3de3f21
2025 年 11 月 7 日
@wangyzj 如果是类似您说的的这种方案,一定是同源,比如 100 个应用,他们应该都是 domain/统一前缀/服务名
或者 domain/服务名
wangyzj
2025 年 11 月 7 日
@c3de3f21 #9 我想在你这我得到答案了。后端控制方案一定要同源,但 oauth2 不同源是很正常的需求,谢谢
LittleFox
2025 年 11 月 7 日
@wangyzj 那就自己系统前后端同源,走 cookie ,oauth 应用用 jwt ?
wangyzj
2025 年 11 月 7 日
@LittleFox #11 都 jwt
meshell
2025 年 11 月 7 日
@wangyzj oauth2 不需要考虑同源这种,我们的系统都是 oauth2 的单点登录,前端也是 spa 。我们是采用后端控制的跳转加 cookie 的,spring 原生支持这套体系。
skallz
2025 年 11 月 8 日
除了久远之前的系统,好像现在都不会第一时间考虑 cookie 了,很多平台对 cookie 还会做限制,到时候如果需要接入某个对 cookie 限制的平台还得重构,更何况 cookie 在现在除了自动携带也没任何好处了 QAQ (一般都是只拿 cookie 做中间存储跨站点传值而已)
wangyzj
2025 年 11 月 8 日
@skallz #14 确实,很多系统已经对 cookie 受限了,应该尽量不用 cookie ,谢谢
mmdsun
2025 年 11 月 9 日
网关+BFF spring boot 官网有个例子。
就应该使用 cookie ,没问题 Oauth2 返回的 accessToken 就不应该直接给前端的。后端网关统一处理,使用 TokenRelayFilter 来处理。

如果不想用 cookie 可以放请求头里面参考:
https://docs.spring.io/spring-session/reference/guides/java-rest.html

Oauth2 BFF 参考:
https://github.com/spring-projects/spring-authorization-server/tree/main/samples#spa-single-page-application-sample
clarkethan
2025 年 11 月 10 日
我也喜欢用 cookie ,HttpOnly + Secure + SameSite=Lax/Strict ,规避一些安全风险,比如 xss ,除非实际场景中有特殊要求,否则我会优先走 cookie

如果是多个不同的服务,建议用统一网关去处理,而不是浏览器去直接请求多个不同的域

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1171078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX