Yale CAS单点(不强制)登录问题

在单点登录时,如果A应用已登录,访问B应用时。

Yale CAS的单点登录机制是:
用户访问单点登录客户端时,如果session.getAttribute("edu.yale.its.tp.cas.client.filter.user") == null,并且request中的ticket也为空,会执行以下步骤
1. 客户端-->服务器端 https://xx.com/login
2. 如果已登录,单点登录的login会调回,并带来ticket。
3. 客户端调用服务器端的ServiceValidator得到登录的username。放到session中。
4. 继续后面的工作。


目前有多个客户端需要用到单点登录机制,但登录需要 不是强制的(用户想登录就登录),而且访问量巨大。如果用现有的CAS Filter,如果还是访问单点登录服务器的login页面(而且不是强制用户登录嘛),或者其他转到单点登录服务器的方式。会很挫,但现在单点登录是基于Cookie的,必须客户端自己访问才可以得到Ticket。。。

因为登录可能共享给合作方的,所以 共享cookie不可行。。。

我现在想单点登录服务器做一种机制,将用户request的唯一信息(ip、浏览器等信息组合出来的)、Ticket的对应信息放在Hashtable中。这样就可以判断是否同一个用户、同一个浏览器登录了。然而貌似不大可行,因为根据HttpServletRequest得不到足够信息保证用户唯一性。。。

有没有更好的机制?请赐教

难道不能在CAS基础上做了?但就算自己做应该还是一样要判定用户唯一性的!!


————————————————————

之前解决了,所以现在把解决方式放上来。
1. cas主动通知,参考了passport.sohu.com的搜狐通行证,通知到chinaren,17173,sohu等各个应用。我现在和sohu通行证是一样的做法了,做了跨域的登录通知,这个需要用到p3p,否则ie会有问题,我用httpwatch监控了sohu,也用了p3p。
2. 改造了中间流程之后,集成了CAS单点登录和 QQ、人人、支付宝的集成登录,并且以后只需要做导入第三方登录和回调的适配器即可,不需要改造核心流程,简化以后的开发。
3. 实现了类似淘宝的购买时如果未登录弹窗功能。而且还实现了弹窗的快速注册流程,大大提交了用户的注册比率。

————————————————————

之后的思考:因为当时我总是想着用Session保持登录状态,觉得这样对于电商网站来说更加安全,所以现在方案是用跨域通知的方式的,但其实还是很蹩脚。最近看了淘宝的登录和登录状态的保持才恍然大悟
1. 可以建一个应用,用于写cookie和保持cookie,对cookie信息进行验证的加密即可保持安全性。
2. 因为我这里大部分的类目页和产品页都是静态的,所以可以利用动静分离来解决。静态页应用不在强制登录的登录,动态加登录限制,静态应用的登录注册模块ajax登录信息,因为是同一个一级域名,所以不用担心跨越问题。

你可能感兴趣的:(登录,cas,二次开发)