1. 概述
本文主要讲述单点登录失败的排查步骤,以便于用户可以根据自己的实际情况进行排查。
2. 排查步骤
2.1 单点是否成功
1)前台单点:直接访问前台单点请求看是否成功。
2)后台单点:看请求中是否有Set-Cookie,如果有一般都是正常的。
若前台单点或后台单点请求都正常,但是依然单点有问题,可能是环境存在问题,需要排查下环境是否正常。
2.2 浏览器问题
换个浏览器(内核不同)测试下单点效果,如果换个浏览器单点可以了,说明是浏览器的问题。测试单点的时候,最好是清除缓存后再进行操作,避免缓存影响导致判断出现错误。
2.3 工程设置
2.3.1 安全防护
1)如果使用跨域 iframe 的方式嵌入报表,出现无法访问的情况,请关闭 Security Headers 高级设置中的「点击劫持攻击防护」按钮。
2)单点登录时若报跨域的问题,请关闭 Security Headers 高级设置中的「内容嗅探攻击防护」按钮。
2.3.2 用户异常
1)平台用户被禁用
如果平台用户被禁用了,会导致前台单点不能正常登录,但后台单点不受影响。
2)用户名密码错误
系统用户名需与平台用户名保持一致
用户名是中文的,或者密码中带有特殊字符,需要用 encodeURIComponent() 方法进行转码。
2.3.3 代码问题
1)前台单点需要去检查地址有没有误,包括:
https错写成http,反之亦然
工程名webroot未修改成实际的工程名
网络不通(请求被拦截、ip、端口写错,决策平台安全限制等等)
可以直接在浏览器访问单点地址,看下返回值,确认下有没有问题。
2)后台单点,以 cas 单点为例,一般可能出问题的是 web.xml,因为需要修改成实际的地址
cas集群:因为集群状态下 session 无法保持,如果在集群环境下使用了单机的cas 方案,可能会导致单点失败。可以根据登录之后的cookie中是否存在 cas_login_ticket 来判断,存在则说明是集群下的 cas 方案,否则是单机。
cas登出:cas serve r会发出一个下线请求,工程中 cas 相关的 filter 会拦截判断是不是登出请求,是的话则与 sessionlistener 配合清除会话中的 token 相关信息,对于用本地生成的证书和域名,jdk 是无法解析和信任的,所以请求无法发出,需要将证书导入服务器使用的jdk。
可能是缺少 jar 包,需要检查 jar 包是否完整。
2.3.4 系统限制
需要检查系统设置是否存在限制,例如白名单等。