发生场景
有一个新项目,做一个综合平台,前后端分离项目。平台中将会内嵌其他项目的页面,进行单点登录后访问。
一开始是使用火狐浏览器进行开发,一切无恙。但是后来使用谷歌进行测试的时候,发现内嵌页面无法正常登录
发现问题
打开浏览器控制台,发现sso也成功了,重定向页面也成功了,但是重定向后,接着的请求却是登录请求。
解决思路
在火狐上可以,但是谷歌却不可以,那么可以判断出,是浏览器差异导致的。
百度一下,发现谷歌在cookie存储方面更为严格,且咱们登录确实也是和cookie相关联的,以这个思路排查下去,可以确定,是因为谷歌浏览器的cookie存储策略所导致的,禁止不同路径的系统请求cookie,所以外部系统获取或写入cookie被禁止,导致外部系统登录失败。
Google 在2020年2月4号发布的 Chrome 80 版本(schedule:https://www.chromestatus/features/schedule)中默认屏蔽所有第三方 Cookie,
即默认为所有 Cookie 加上 SameSite=Lax 属性(https://www.chromestatus/feature/5088147346030592),
并且拒绝非Secure的Cookie设为 SameSite=None(https://www.chromestatus/feature/5633521622188032),
SameSite的作用就是防止跨域传送cookie,从而防止 CSRF 攻击和用户追踪,此举是为了从源头屏蔽 CSRF 漏洞。
解决方法
将外部系统用nginx代理成和平台相同的路径即可,这是最简单的方法~
7205

被折叠的 条评论
为什么被折叠?



