`
liang30890136
  • 浏览: 1570 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

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登录信息,因为是同一个一级域名,所以不用担心跨越问题。
分享到:
评论
1 楼 liang30890136 2011-04-16  
OK,有解决思路了。

改进登录流程,就是现有的Spring webflow,重新配置流程,在流程中初始化各个应用的session(是否登录,记录在session中!),不改变现在cas服务器校验cookie的认证和授权方式。不再考虑共享cookie,毕竟cas服务器的cookie是加密的,这样做非常安全,没必要改。

从模型上来说
以前是:进公园,那么去游乐场的时候会强制校验是否已经付钱,必须回到门口(CAS服务器)拿到票,然后才知道持票人是谁(AuthenticatedUser),然后进入游乐园。
现在:不是强制登录的,而且甚至非登录用户也可做一些业务,如果登录,那么在公园门口付钱,门口就给各个内场的门票。(因为这里必须利用用户的浏览器,目前方案是在流程中加一个view-state,就是一个页面,里面iframe各个应用的初始化登录状态的Servlet,这个页面完成后自动传入进入单点登录前的页面),这样一次性引导用户拿票,后面会测试一下性能,因为考虑到通讯很小(服务器在局域网),而且都是内存中应该不会是瓶颈。这样规划还有个好处,就是如果A、B、C3个应用,如果刚好B应用挂了,所以没通知到,那么B再登陆,转入登录流程,也可以迅速恢复登录状态,流程是通的、符合逻辑的,去掉了CAS Filter。

Over,下周继续工作,希望可以花3天攻克。
以前没有接触Spring的MVC和workflow,所以前几天看CAS的源码费了不少力气,一个星期基本上没有障碍了,而且改了很多源码,都合乎自己的设想,所以自己已经很满足,还要努把力,也希望自己这个帖子可以帮助后面有疑问的人!

相关推荐

    phpCAS源码以及调用示例(redis管理session,解决无法logout的问题)

    在IT行业中,尤其是在Web开发领域,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,使得用户只需一次登录就能访问多个相互关联的应用系统。CAS(Central Authentication Service)是 Yale 大学开发的一...

    cas-server-3.5.2

    "cas-server-3.5.2" 是一个用于实现单点登录(Single Sign-On, SSO)集成方案的软件包,具体版本为3.5.2。SSO是一种网络认证协议,它允许用户在一个应用系统中登录后,无须再次认证即可访问其他相互信任的应用系统。...

    单点登录.docx

    单点登录(Single Sign-On,简称 SSO)是一种允许用户在一个系统中登录后,即可访问其权限范围内的多个系统的身份验证技术。它简化了用户在多系统环境中的登录流程,提高了用户体验,同时也降低了管理多个独立登录...

    spring-security.介绍

    CAS处理过滤器用于处理Yale CAS服务器的单点登录功能。HTTP基本授权过滤器则处理基于HTTP基本认证的身份验证。集成过滤器管理认证信息在请求之间的传递,如将用户信息存储在HTTP会话中。最后,安全强制过滤器检查...

    Spring_Security详解

    3. CAS处理过滤器:处理CAS服务票据,验证Yale CAS服务器的单点登录状态。 4. HTTP基本授权过滤器:处理使用HTTP基本认证的身份验证请求。 5. 集成过滤器:管理认证信息在请求之间的存储,如HTTP会话。 6. 安全强制...

    Spring Security学习总结一

    3. **CAS处理过滤器**:处理来自Yale CAS(中央认证服务)的单点登录服务票据,验证用户身份。 4. **HTTP基本授权过滤器**:处理基于HTTP基本认证的请求,进行用户身份验证。 5. **集成过滤器**:负责在多个请求之间...

Global site tag (gtag.js) - Google Analytics