公司项目组同事最近开发部署SSO单点登录;要求所有系统登录都切换到SSO登录,陆续上了几个系统都运行正常;公司内部系统都是.net项目 因此都是利用 DotNetCasClient 客户端接SSO。
而我负责的项目部署后 登录时却偶尔出现循环重定向问题;临时的解决办法就是重启站点或修改下config文件;
但这治标不治本;基本上把网上能查到的都了,有两篇文章转发量相当大 一是园里 刑少 同学的《CAS 与.net 集成的 “循环重定向”问题分析》 二是360文档中在PerformHttpGet方法加证书自动回调验证;
但两篇文章都没解决我的问题
仔细思考 发现之前webform项目利用接SSO都没有这样的问题 但我的项目却是一个mvc4的项目,却出现这样的问题。
对票据输出,发现一天内由于循环重定向,票据量上升了几万个
查系统日志,终于发现关于DotNetCasClient的 错误信息 不能将空值插入缓存
最终定位到ParseResponseFromServer方法 将一个string变量在没有判断是否为空的情况下插入缓存
加判断;查看代码逻辑;测试 发现没问题 不会引发其它bug 最后上线 发现再没有人反应循环重定向问题。Ohyeah, 系统日志灰常重要啊,还有网上解决方法不一定适合你啊,每个项目的环境毕竟不太一样,在这上面浪费了不少时间。
if (CasAuthentication.ProxyTicketManager != null && !string.IsNullOrEmpty(proxyGrantingTicketIou)) { string proxyGrantingTicket = CasAuthentication.ProxyTicketManager.GetProxyGrantingTicket(proxyGrantingTicketIou); if (!string.IsNullOrEmpty(proxyGrantingTicketIou) && !string.IsNullOrEmpty(proxyGrantingTicket)) CasAuthentication.ProxyTicketManager.InsertProxyGrantingTicketMapping(proxyGrantingTicketIou, proxyGrantingTicket); }