论坛首页 Java企业应用论坛

关于sso单点登录系统的一些想法

浏览 9278 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-06   最后修改:2010-11-06

今天晚上跟朋友聊sso,简单整理了下思路,特此记录。

系统方案基于httpservice,在此不探讨用户注册、停用等问题,只探讨登录问题。
必要条件:客户端需要维护自己的session队列,系统基于session实现单点登录

客户端、服务器端均需要提供几个连接 session注销、session登录、session校验等几个url

用户登录,当用户请求需要权限页面时,首先请求"session校验"判断用户是否已经在服务器登录了,如果已经登录服务器返回登录用户名信息,完成登录,否则跳转到服务器"session登录"完成用户登录,并跳转回原页面。
当用户在客户端点击注销按钮通知服务器用户注销,服务器发送到所有客户端"session注销"通知此用户下线。
服务器需要维护各个客户端sessionid与服务器sessionid的对应关系,注销时直接通过sessionid通知客户端做相应操作即可。

sso服务器主要工作需要维护各个客户端的sessioid对应关系、并定时轮询客户端"session校验",维护session,保证用户不失效。

sso服务器如果重启后,原有客户端的session注销会存在异常,但是这种异常通常是短时间的, 当客户端session失效异常即可消除,目前没有想到好的方法解决这个问题。
重启后,sso服务器应该立即对所有客户端的session进行轮询,将服务器数据队列完成创建,以便用户登录sso时完成对了同步。
要解决的话就必须保证浏览器客户端访问一次sso服务器,当完成一次访问后即可完成对列的维护。

此方案可以解决基于cookie的sso问题

缺点,不能实现匿名登录,不过应该可以变相实现,问题不大。
另外,必须保证sso服务器高可用,一旦当机可能会造成系统大面积无法登陆系统,导致系统瘫痪。

 

   发表时间:2010-11-07  
可以考虑使用耶鲁大学开源项目  http://www.jasig.org/cas

引用
另外,必须保证sso服务器高可用,一旦当机可能会造成系统大面积无法登陆系统,导致系统瘫痪。

耶鲁的CAS中, 有解决的方案.
0 请登录后投票
   发表时间:2010-11-07  
xuwenkeke 写道
可以考虑使用耶鲁大学开源项目  http://www.jasig.org/cas

引用
另外,必须保证sso服务器高可用,一旦当机可能会造成系统大面积无法登陆系统,导致系统瘫痪。

耶鲁的CAS中, 有解决的方案.


呵呵,CAS我是知道的,不过没有仔细研究,因为我们公司有成熟的SSO产品,这个主要是跟以哥们聊天闲聊时总结的,顺手给记下来的
0 请登录后投票
   发表时间:2010-11-07  
建议下次再记录的时候画一个图,不单大家看着方便,您将来自己看起来也更清晰。

这个思想都差不多,我以前接触过商业的产品,不过最近也要考虑自己给公司内容的产品实现一个了。所以对这个话题有点兴趣,不过看文字绕来绕去的比较累,不过还是看完了。
0 请登录后投票
   发表时间:2010-11-08  
楼主可以再深入一些, 其实目前有不少开放的完善的协议可以借鉴.
0 请登录后投票
   发表时间:2010-11-08  
grandboy 写道
建议下次再记录的时候画一个图,不单大家看着方便,您将来自己看起来也更清晰。

这个思想都差不多,我以前接触过商业的产品,不过最近也要考虑自己给公司内容的产品实现一个了。所以对这个话题有点兴趣,不过看文字绕来绕去的比较累,不过还是看完了。


呵呵,这个想法是基于我们公司产品实施以及工作中遇到的实际问题总结的,这个只能算是一个解题思路,具体实现还是没有考虑,因为公司毕竟有成熟的产品。
0 请登录后投票
   发表时间:2010-11-08  
josso很方便滴。
0 请登录后投票
   发表时间:2010-11-08  
jinyanhui2008 写道

今天晚上跟朋友聊sso,简单整理了下思路,特此记录。

系统方案基于httpservice,在此不探讨用户注册、停用等问题,只探讨登录问题。
必要条件:客户端需要维护自己的session队列,系统基于session实现单点登录

客户端、服务器端均需要提供几个连接 session注销、session登录、session校验等几个url

用户登录,当用户请求需要权限页面时,首先请求"session校验"判断用户是否已经在服务器登录了,如果已经登录服务器返回登录用户名信息,完成登录,否则跳转到服务器"session登录"完成用户登录,并跳转回原页面。
当用户在客户端点击注销按钮通知服务器用户注销,服务器发送到所有客户端"session注销"通知此用户下线
服务器需要维护各个客户端sessionid与服务器sessionid的对应关系,注销时直接通过sessionid通知客户端做相应操作即可。

sso服务器主要工作需要维护各个客户端的sessioid对应关系、并定时轮询客户端"session校验",维护session,保证用户不失效。

sso服务器如果重启后,原有客户端的session注销会存在异常,但是这种异常通常是短时间的, 当客户端session失效异常即可消除,目前没有想到好的方法解决这个问题。
重启后,sso服务器应该立即对所有客户端的session进行轮询,将服务器数据队列完成创建,以便用户登录sso时完成对了同步。
要解决的话就必须保证浏览器客户端访问一次sso服务器,当完成一次访问后即可完成对列的维护。

此方案可以解决基于cookie的sso问题

缺点,不能实现匿名登录,不过应该可以变相实现,问题不大。
另外,必须保证sso服务器高可用,一旦当机可能会造成系统大面积无法登陆系统,导致系统瘫痪。

 

基于什么样的考虑需要这种解决方案?

0 请登录后投票
   发表时间:2010-11-08  
ywlqi 写道
jinyanhui2008 写道

今天晚上跟朋友聊sso,简单整理了下思路,特此记录。

系统方案基于httpservice,在此不探讨用户注册、停用等问题,只探讨登录问题。
必要条件:客户端需要维护自己的session队列,系统基于session实现单点登录

客户端、服务器端均需要提供几个连接 session注销、session登录、session校验等几个url

用户登录,当用户请求需要权限页面时,首先请求"session校验"判断用户是否已经在服务器登录了,如果已经登录服务器返回登录用户名信息,完成登录,否则跳转到服务器"session登录"完成用户登录,并跳转回原页面。
当用户在客户端点击注销按钮通知服务器用户注销,服务器发送到所有客户端"session注销"通知此用户下线
服务器需要维护各个客户端sessionid与服务器sessionid的对应关系,注销时直接通过sessionid通知客户端做相应操作即可。

sso服务器主要工作需要维护各个客户端的sessioid对应关系、并定时轮询客户端"session校验",维护session,保证用户不失效。

sso服务器如果重启后,原有客户端的session注销会存在异常,但是这种异常通常是短时间的, 当客户端session失效异常即可消除,目前没有想到好的方法解决这个问题。
重启后,sso服务器应该立即对所有客户端的session进行轮询,将服务器数据队列完成创建,以便用户登录sso时完成对了同步。
要解决的话就必须保证浏览器客户端访问一次sso服务器,当完成一次访问后即可完成对列的维护。

此方案可以解决基于cookie的sso问题

缺点,不能实现匿名登录,不过应该可以变相实现,问题不大。
另外,必须保证sso服务器高可用,一旦当机可能会造成系统大面积无法登陆系统,导致系统瘫痪。

 

基于什么样的考虑需要这种解决方案?

这个也没基于什么,主要是闲聊时说起来的,具体实现未深入考虑

0 请登录后投票
   发表时间:2010-11-08  
引用
sso服务器如果重启后,原有客户端的session注销会存在异常,但是这种异常通常是短时间的, 当客户端session失效异常即可消除,目前没有想到好的方法解决这个问题。

你是说sso服务器重启后,服务端的session会丢失?session可以通过memcached之类的分布式缓存保存在其他地方,不要和sso服务器放在一起。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics