问题:在解决跨域问题的前提下,使用谷歌浏览器仍然登录失败。
由于登录时使用到了cookie,项目又是前后端分离,所以在跨域前提下解决跨域问题后可以正常发送cookie。但是在Chrome浏览器高版本中,它为了防止第三方网站盗用cookie实现CSRF攻击,所以谷歌采用设置cookie的same-site和secure属性来防止CSRF攻击。
解决方案:
一、强制用户不要使用Chrome类似的浏览器(开个玩笑哈,这样当然是不合理的)
那肯定是pass掉
二、关掉Chrome浏览器的这个设置(由于安全性,所以该方法也是不推荐!)
首先在地址栏搜 chrome://flags,然后
注: 由于关掉了这些设置,所以有可能会发生CSRF攻击,有安全隐患,不建议。
三、使用https来保证后台接口安全性(虽然安全,但要花钱)
在使用https的前提下根据Chrome浏览器的提示,还需设置cookie的same-site和
secure属性。
例如:SameSite=None; Secure
四、将前端的url和后端请求接口设置为同一域名下即可
例如:
前端:http://qianduan.test.com
后端:http://houduan.test.com
这两个项目都属于 test.com 域名下,所以属于同站不同源,浏览器就会认为url和请求目标一致,并非第三方网站请求,所以就会成功发送cookie了。
same-site属性介绍
- same-site:该属性值有三个,None,Lax,Strict三种;
None:该规则是最为宽松的一种,不做任何限制,但是同时也需要设置secure,例如:
- SameSite=None; Secure
** 注:** 当使用该规则时,则需使用https。
- Lax:该规则较为宽松,大多数是不发送第三方cookie的,但是导航到目标网站的get请求除外。
图表参考于 http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html
- Strict:该规则是最为严格的,完全禁止发送第三方cookie,只有当前URL和请求目标一致才可以。