1. 概述
1.1 版本
报表服务器版本 | 功能变动 |
---|---|
11.0 | |
11.0.4 | 内置HTTPS_SameSite_跨域策略 |
1.2 问题描述
谷歌浏览器 80.0 及以上版本、火狐浏览器 96.0 及以上版本、360极速浏览器,单点登录失败,跳转到登录页,其他浏览器正常。
1.3 原因分析
由于 cookie 问题导致单点失败。
谷歌浏览器 80.0 及以上版本、火狐浏览器 96.0 及以上版本均修改了安全策略,默认 SameSite 策略不允许 cookie 跨站发送,因此单点登录会失败。
360极速浏览器使用了谷歌浏览器内核,也有可能出现这个情况。
2. 解决方案
2.1 https解决方案
2.1.1 非运维平台部署的帆软应用
对于非运维平台部署的帆软应用,且工程版本为11.0.4及之后,
若已升级工程为 https,可直接使用产品内置的HTTPS_SameSite_跨域策略,无需任何操作。
https 设置跨域单点登录后,可直接实现跨站单点登录。
2.1.2 运维平台部署的帆软应用
1)下载并解压,获取配置文件CORS.conf:CORS.zip
2)将CORS.conf上传到帆软应用的/nginx外挂目录/conf/custom目录中。
如不存在该目录,请手动创建,并赋予足够的读写权限
如不清楚外挂目录位置,可通过导出部署信息找回,详情请参见:导出项目部署信息
3)登录运维平台,选择指定项目,点击「维护>组件管理」,重启nginx组件。
4)重启解析配置时,会自动加载配置文件CORS.conf,将内容合并到nginx.conf文件的location / ${APP_PATH}块内,即可实现跨站单点登录。
2.2 http解决方案
注:本节方案配置比较复杂,推荐将工程升级为 https 后,再参考本文2.1节优化。
解决方案一:统一主域名
参考下方跨站说明,保证两个工程的顶级域名、次顶级域名相同,比如 a.b.com 和 c.b.com,「.com」顶级,「b」是次顶级。
举例:bbs.fanruan.com、help.fanruan.com,顶级域名均为 .com,次级域名均为 fanruan,这样的两个工程则不会出现此问题。
跨站说明:
跨站是用 Public Suffix List 域名后缀列表 来判断的。
两个 URL ,顶级域名和次顶级域名内容(后面用 public suffix+1 指代)相同,为同站:
顶级域名:从 Public Suffix List 域名后缀列表中匹配的最长后缀长度。
次顶级域名:顶级域名前面的字段。
注:顶级域名列表可参见:顶级域名列表
比如 www.sina.com.cn 的 public suffix+1 是 sina.com.cn,www.sohu.com.cn 的 public suffix+1 是 sohu.com.cn, 两者不一样,所以不属于同一个站点。
再比如 nanzhuang.taobao.com 的 public suffix+1 是 taobao.com,nvzhuang.taobao.com 的 public suffix+1 也是 taobao.com,那么它俩就是同一个站点的。
解决方案二:配置代理
可通过代理,将帆软和第三方系统配置到同一域名下,第三方系统里面配置的报表链接需要改成走代理的链接。即可绕过samesite。
2.3 临时解决方案
该临时方案是通过修改谷歌的设置解决的,每台访问工程的电脑都需要修改谷歌的设置,使用体验差,不太推荐;推荐使用2.1节方案。
该临时方案适用于所有谷歌内核浏览器,如新 edge(访问edge://flags/)、360 安全浏览器(访问se://flags/)等,但不适用于 91 及以上版本的谷歌内核浏览器。
在谷歌浏览器地址栏中输入:chrome://flags/,然后在搜索框输入「SameSite」搜索并找到「SameSite by default cookies」选项,右侧按钮选择「Disabled」。
设置完成后,需要重启谷歌浏览器,方可生效。如下图所示: