问题:在解决跨域问题的前提下,使用谷歌浏览器仍然登录失败。

  由于登录时使用到了cookie,项目又是前后端分离,所以在跨域前提下解决跨域问题后可以正常发送cookie。但是在Chrome浏览器高版本中,它为了防止第三方网站盗用cookie实现CSRF攻击,所以谷歌采用设置cookie的same-sitesecure属性来防止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和请求目标一致才可以。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐