V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wangyzj
V2EX  ›  程序员

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

  •  
  •   wangyzj · 2025 年 11 月 6 日 · 2165 次点击
    这是一个创建于 77 天前的主题,其中的信息可能已经有所发展或是发生改变。
    正在做一个企业内部单点登录平台,也就是 idaas

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

    前端自己存起来就可以了


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

    然后产生了 302 跳转登录页

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

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

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

    如果是多个不同的服务,建议用统一网关去处理,而不是浏览器去直接请求多个不同的域
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   976 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    ♥ Do have faith in what you're doing.