ecology9-嵌入第三方系统,特定情况下在嵌套页提示“登录超时,请重新登录”
- 问题描述
- ×尝试1
- ×尝试2
- ×尝试3
- √尝试4
- 参考
问题描述
A系统对接了ecology9的单点登录。A系统在某个边栏菜单嵌入ecology9的流程页面。当清空浏览器缓存时,A系统在单点登录页面,ecology9也在统一的A系统单点登录界面。A系统登录,切换到嵌套(嵌套ecology9)的页面,在ecology9的页签刷新,自动登录到ecology9的页面。切换回A系统页面,点击嵌套部分,嵌套部分页面提示“登录超时,请重新登录”,只有嵌套部分回退到了ecology9的登录页,没有完全退出A系统。
**
×尝试1
查看返回官方文档得知,单点登录需设置 is-login-check 的安全策略
https://e-cloudstore.com/e9/file/Third-partysinglesign-onEcologysolution.pdf
**
×尝试2
关闭超时检测的配置
/ecology/WEB-INF/weaver_security_config.xml下
×尝试3
初步猜测是Cookies丢失的问题
nginx配置中 location位置处添加
proxy_cookie_path / “/; httponly; secure; SameSite=Lax”;
不生效
√尝试4
浏览器控制台-源代码中搜索关键词
在浏览器控制台-“源代码”中左键搜索提示“登录超时,请重新登录”,搜索到代码
jd-gui搜索jar包内关键词
再到ecology9的jar包weaver9.jar通过jd-gui搜索 “errorCode”,“002”,“超时”等关键词,搜索到com.cloudstore.dev.api.service.SessionFilter
进一步搜索getwrongJSONObject(2),搜索到两处代码
第一处代码是一个配置是否为1
层层跟踪源码,发现配置文件位置/ecology/WEB-INF/prop/weaver_cloudtoken.properties
配置值为0,不满足代码条件
第二处是用户信息为空
怎么进一步判断用户信息是否在此类中被清空,加日志
覆盖 jar包的类添加日志
通过jd-gui反编译class文件,在src中添加jar中相同包路径的反编译代码,在此次基础上添加日志,编译,替换到服务器的class文件,重启服务
通过日志信息判断,进入该Filter中时用户信息就是空的,很有可能前端发送请求就是空的
samesite策略
再一步思考Google的samesite策略,发现用的https,设置SameSite属性跨域的内容有差别
应该设置为SameSite=None
在nginx配置中添加此配置,测试生效
参考
完美解决Chrome Cookie SameSite跨站限制
Chrome 配置samesite=none方式