问题恢复是通过cas单点登录进入系统,在一个系统中嵌入第三方系统的页面,在第三方系统中也配置了cas。 进入某个系统并跳转到登录页,嵌入iframe的第三方系统将再次进入登录页。
初步分析表明,该系统在iframe中嵌入了第三方系统页面,可以复制iframe中的链接供单独访问,消除了第三方系统的问题。 此外,将此链接的iframe放入新的html文件将无法正常访问,从而消除当前系统的iframe加载问题。 发现了问题。 再次在火狐浏览器中打开刚创建的html文件即可正常访问。 最后的定位是浏览器兼容性问题,当前浏览器: Google Chrome,85.0.4183.102版(正式版本) 64位)。
打开浏览器控制台时,您会看到接口请求有500个错误。 控制台将显示以下提示(indicatewhetheracookieisintendedtobesetinacross-sitecontextbyspecifyingitssamesiteattribute )。
原因分析谷歌在2020年2月4日发布的Chrome 80版本(schedule:https://www.chrome status.com/features/schedule )中查找第三方Cookie 默认情况下,将SameSite=Lax属性(https://www.chrome status.com/feature/5088147346030592 )添加到所有Cookie中,而非secure cookie是samesite
SameSite的作用是通过防止在域之间发送cookie来防止CSRF攻击和用户跟踪。 这是为了从源中屏蔽CSRF漏洞。
有关SameSite属性的介绍,请参阅落后丸子的《Cookie 的 SameSite 属性》。
在上述问题中,当前系统访问第三方系统时,带走了一些cookie,并通过该SameSite机制进行了监听。
对于可能受Chrome 80影响场景,以下组件数据基于第三方网站的登录状态返回相关用户数据的API可以在HTTP本地部署解决方案Chrome浏览器中打开新的标签
chrome ://flags//# cookies-without-same-site-must-be-secure
然后,如上图所示,将两个配置都设置为Disabled
不使用谷歌浏览器,或者将谷歌浏览器降级到Chrome 79或更高版本,然后关闭自动更新。
将两个系统部署到同一台服务器上,并使用相同的IP同源策略发送cookie。
购买SSL证书,升级HTTP服务,将API切换为HTTPS协议请求,并验证响应标头中的Set-Cookie是否包含SameSite=None和Secure字符。