http://jetking.blog.51cto.com/147336/25305
http://blog.csdn.net/fishinhouse/archive/2007/09/29/1806700.aspx
http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。
当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;
根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;
用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
1、需要验证服务器:
验证服务器相当于同一入口,任何登陆和注销工作都会通过这里,验证的工作也在这里进行
2、过程:
a,b,c服务器为业务服务器,d为验证服务器
用户A在a服务器上进行需要验证的操作(比如url_a),a服务器发现用户未登陆,则跳转到d服务器的登陆页面,
d服务器通过A用户验证后,生成用户的session,并同时生成用户的一次性令牌并附加在url_a后面(比如url_a?ssid=key_id)进行跳转,
此时a服务器根据传入的ssid通过远程调用或者服务器间私有通道调用d服务器的验证服务,d服务器判断令牌是否有效并删除次令牌,
如果通过验证此时a服务器获得用户信息,d服务器记录a服务器的地址,此时A用户在a服务器上已经登陆了。
如果A用户在b或者c服务器上访问需要验证的操作比如(url_b),则跳转到d服务器的登陆页面,因为已经存在着a用户的session,此时同样生成一次性令牌重复上述过程。
3、退出过程:
用户A在a、b服务器登陆,用户点击d服务器的退出链接,则d服务器清除d服务器session,
同时根据session中A用户登录过的服务器列表通过页面上有img指到a,b服务器的退出功能,
此时通过这种方式同时清除a,b服务器上的A用户session
=====
一般来说,单点登陆有两种模式:
第一种是DNN模式。也就是把各个子系统的界面都集成到一起,当到一个类似DNN一样UI的容器管理器里面,用这样的方式,来实现一次登陆,然后在各个其他系统中继续享有这个用户登录服务。 其实这是采用一个WebApplication的方式。
第二种,类似微软的passport,一次登陆之后,就可以在msn,hotmail,或者space中任其切换而不需要重新登陆。这一中模式就不是一个WebApplication了,而是在多个Application上的控制。