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

2020-07-30 13:51:36 +08:00
 AmosOvO
最近项目在一些同事电脑上总是登录不上去,最后排查出问题估计是谷歌浏览器版本 sameSite 默认值的问题,在网上也看了蛮多解决办法,大多数都是基于 spring-session-core 的 2.1 版本以后是支持修改默认的 sameSite 的,但是公司项目还是用的 2.0 的,并且也不让升级,所以请问下大家有什么其他办法吗?
6109 次点击
所在节点    Java
17 条回复
lizz666
2020-07-30 13:56:44 +08:00
之前看到阿里系发过相关文章,不知对你有没有用:
https://github.com/mqyqingfeng/Blog/issues/157
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
2020-07-30 14:07:31 +08:00
加个 filter 修改 set-cookie 的值不行吗
AmosOvO
2020-07-30 15:46:50 +08:00
@throns 请求一下您公司是在什么位置拦截的 cookie,我用拦截器 after 方法拦截获取的 cookie 都还是获取的为空,感觉 cookie 在很后面才会去设置,
throns
2020-07-30 15:49:25 +08:00
有新的解决办法,我司服务都是通过 nginx 来转发的,nginx 配置加上 proxy_cookie_path / "/; secure"; 可解决问题,我自己在本地装了 nginx 验证了,不需要修改后端服务,不知道你司是不是通过 nginx 转发的
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
2020-07-30 16:13:57 +08:00
好奇问一下,java servlet api 没办法直接操作 raw response 吗,还是说一般业务接口开发没法操作 raw response
throns
2020-07-30 16:15:33 +08:00
@caaaalabash 目前 Chrome 84 以上版本,如果不加上 secure 也会被 blocked
AmosOvO
2020-07-30 16:28:01 +08:00
@throns 领导不让~让在代码中解决,所以还得麻烦问您一下,Set-Cookie 具体是在哪获取的,我使用的的拦截器无法获取到,估计还在后面的流程,服务器才在请求头里面添加 Set-Cookie
throns
2020-07-30 17:09:56 +08:00
@AmosOvO 非常抱歉,我是前端,后端的具体逻辑不太懂,估计帮不上你的忙
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
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
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
2020-07-31 17:45:13 +08:00
@throns secure 是必选项, 主要的问题在于其他浏览器 存在 不识别 SameSite: None, 或者将其视作 SameSite: Lax 的情况
throns
2020-07-31 20:08:22 +08:00
@caaaalabash 我们所说的都是 Chrome 浏览器,是 80 以上版本,不同系统和平台之间有不同的表现。你说的其他浏览器,是指 Chrome 不同版本,还是 Firefox,360 浏览器,搜狐浏览器,Edge 浏览器,还是其他的呢? 11 楼证实了不一定要 secure,我的疑惑是哪个版本必须要 secure,和系统有没有关系?
caaaalabash
2020-08-03 17:47:37 +08:00
@throns ......
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

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

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

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

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

© 2021 V2EX