chrome浏览器samesite同站策略问题

问题: 近期在前后端分离做登录,出现本地postman/swagger调用cookie和session生成正常,前端服务器节点调用时出现session为null,cookie也会出现第二次访问变更,同一个页面请求sessionId值都不同,在F12查看cookie时看到黄色提示"", 后端已做跨域处理,前端 也使用了 withCredentials=true;
解析: 这个是新版的chrome浏览器samesite同站问题,浏览器的samesite属性用来防止CSRF攻击和用户跟踪; 其中 属性samesite 值可为 Strict/Lax/None;Strict 完全禁止第三方Cookie,跨站点时不会发送任何的cookie; Lax在 链接/预加载/form表单get请求时,才发送cookie; None不做同站的检查和限制. chrome 80版本之前默认为None,之后默认为Lax, 同时设置为SameSite=None; Secure ,即https协议才会生效;
解决办法:
1.部分浏览器版本可打开 chrome://flags/#site-isolation-trial-opt-out 将"SameSite by default cookies"和"Cookies without SameSite must be secure"的项禁用,并reluanch,可临时解决用户问题;
2.将response的header设置为
Set-Cookie: SameSite=None; Secure
即必须为https协议;
3.使用Nginx做同源映射,为域名时端口不做限制,servername为IP时端口限制为80,否则前后端请求时domain显示一个为IP,一个为IP:port;注意: nginx需和前端服务器或者后端服务器放在同一个节点,(问题: 分布式时只能使用https方法?)

posted @ 2022-09-26 00:55  刀霸汉  阅读(539)  评论(0)    收藏  举报