V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AmosOvO
V2EX  ›  Java

关于谷歌浏览器新版本的 sameSite,跨域无法携带 Cookie

  •  
  •   AmosOvO · 2020-07-30 13:51:36 +08:00 · 6157 次点击
    这是一个创建于 1609 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近项目在一些同事电脑上总是登录不上去,最后排查出问题估计是谷歌浏览器版本 sameSite 默认值的问题,在网上也看了蛮多解决办法,大多数都是基于 spring-session-core 的 2.1 版本以后是支持修改默认的 sameSite 的,但是公司项目还是用的 2.0 的,并且也不让升级,所以请问下大家有什么其他办法吗?
    17 条回复    2020-08-10 14:42:23 +08:00
    lizz666
        1
    lizz666  
       2020-07-30 13:56:44 +08:00
    之前看到阿里系发过相关文章,不知对你有没有用:
    https://github.com/mqyqingfeng/Blog/issues/157
    throns
        2
    throns  
       2020-07-30 14:06:28 +08:00
    我们公司的项目最近也遇到了这个问题。
    目前的临时的解决方案是降低浏览器版本,80 一下
    后面的解决方案应该是设置 Set-Cookie: xxxx=xxxxx; SameSite=None; Secure,不过遇到的问题和你一样,考虑到后端服务的稳定性,需要做很多认证,反正短期解决不了。
    还可以将这两个配置设为 disabled 试试:
    chrome://flags/#same-site-by-default-cookies
    chrome://flags/#cookies-without-same-site-must-be-secure
    lululau
        3
    lululau  
       2020-07-30 14:07:31 +08:00
    加个 filter 修改 set-cookie 的值不行吗
    AmosOvO
        4
    AmosOvO  
    OP
       2020-07-30 15:46:50 +08:00
    @throns 请求一下您公司是在什么位置拦截的 cookie,我用拦截器 after 方法拦截获取的 cookie 都还是获取的为空,感觉 cookie 在很后面才会去设置,
    throns
        5
    throns  
       2020-07-30 15:49:25 +08:00
    有新的解决办法,我司服务都是通过 nginx 来转发的,nginx 配置加上 proxy_cookie_path / "/; secure"; 可解决问题,我自己在本地装了 nginx 验证了,不需要修改后端服务,不知道你司是不是通过 nginx 转发的
    caaaalabash
        6
    caaaalabash  
       2020-07-30 15:53:11 +08:00
    我的解决办法是这样, 额外设置一个 cookie
    set-cookie: yourname=sessionID SameSite: None => 部分浏览器不识别 SameSite: None
    set-cookie: yourname-legacy=sessionID 不设置 SameSite
    后端从 cookie(yourname) || cookie(yourname-legacy)取出 sessionID
    KuroNekoFan
        7
    KuroNekoFan  
       2020-07-30 16:13:57 +08:00
    好奇问一下,java servlet api 没办法直接操作 raw response 吗,还是说一般业务接口开发没法操作 raw response
    throns
        8
    throns  
       2020-07-30 16:15:33 +08:00
    @caaaalabash 目前 Chrome 84 以上版本,如果不加上 secure 也会被 blocked
    AmosOvO
        9
    AmosOvO  
    OP
       2020-07-30 16:28:01 +08:00
    @throns 领导不让~让在代码中解决,所以还得麻烦问您一下,Set-Cookie 具体是在哪获取的,我使用的的拦截器无法获取到,估计还在后面的流程,服务器才在请求头里面添加 Set-Cookie
    throns
        10
    throns  
       2020-07-30 17:09:56 +08:00 via iPhone
    @AmosOvO 非常抱歉,我是前端,后端的具体逻辑不太懂,估计帮不上你的忙
    ragnaroks
        11
    ragnaroks  
       2020-07-30 17:28:59 +08:00
    set-cookie: sid=c595f0699ead4e8bac2467ad99b14ed9; expires=Fri, 31 Jul 2020 09:27:36 GMT; domain=example.com; path=/; samesite=none; httponly

    84.0.4147.105 实测正常填充
    throns
        12
    throns  
       2020-07-30 17:45:54 +08:00
    @ragnaroks 嗯嗯,和系统有关,我 Mac,最新版本也 set 成功,我们业务用的是 Window7,最新的版本很多失败,导致我之前排查的时候没有复现,后来远程他们的电脑才看到是这个问题,console 直接提示:A cookie associated with a resource at xxxxxx was set with `SameSite=None` but without `Secure`. It has been blocked, as Chrome now only delivers cookies marked `SameSite=None` if they are also marked `Secure`. 我现在也没搞懂具体策略是怎么样的
    ragnaroks
        13
    ragnaroks  
       2020-07-30 17:49:16 +08:00
    @throns 我 F12 有类似提示,但是确实是 set 成功了

    A cookie associated with a resource at "URL" was set with `SameSite=None` but without `Secure`. A future release of Chrome will only deliver cookies marked `SameSite=None` if they are also marked `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5633521622188032.
    caaaalabash
        14
    caaaalabash  
       2020-07-31 17:45:13 +08:00
    @throns secure 是必选项, 主要的问题在于其他浏览器 存在 不识别 SameSite: None, 或者将其视作 SameSite: Lax 的情况
    throns
        15
    throns  
       2020-07-31 20:08:22 +08:00 via iPhone
    @caaaalabash 我们所说的都是 Chrome 浏览器,是 80 以上版本,不同系统和平台之间有不同的表现。你说的其他浏览器,是指 Chrome 不同版本,还是 Firefox,360 浏览器,搜狐浏览器,Edge 浏览器,还是其他的呢? 11 楼证实了不一定要 secure,我的疑惑是哪个版本必须要 secure,和系统有没有关系?
    caaaalabash
        16
    caaaalabash  
       2020-08-03 17:47:37 +08:00
    @throns ......
    llanc
        17
    llanc  
       2020-08-10 14:42:23 +08:00
    @throns 我项目组也遇到了,用大佬的这个方法解决了 disabled
    chrome://flags/#same-site-by-default-cookies
    chrome://flags/#cookies-without-same-site-must-be-secure
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5744 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:52 · PVG 10:52 · LAX 18:52 · JFK 21:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.