单点登录(SSO)

什么是单点登陆
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
 
单点登陆的技术实现机制
如下图所示:
1)当用户第一次访问应用系统1时,因为还没有登录,会被引导到认证系统中进行登录
2)根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该给用户返回一个认证的凭据——ticket
3)用户再访问别的应用的时候(3,5)就会将这个ticket带上,作为自己认证的凭据。应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性(4,6)。如果通过校验,用户就可以在不用再次登录的情况下访问系统系统2和3了

从上面的图可以看出,要实现SSO,需要以下主要功能:

1)所有应用系统共享一个身份认证系统
  统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库进行比较,对用户进行登录认证;认证成功后,认证系统应生成统一的认证标志(ticket)返还给用户。另外,认证系统还应该对ticket进行校验,判断其有效性

2)所有应用系统能够识别和提取ticket信息
  要实现SSO功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能够对ticket进行提取和识别,通过与认证系统的通讯,能自动判断当前用户是否登陆过,从而完成单点登录的功能

上面的功能只是一个非常简单的SSO架构,现实情况的SSO有着更复杂的结构。有两点需要指出的是:

1)单一的用户信息数据库并不是必须的。只要统一认证系统,统一ticket的产生和校验,无论用户信息储存在什么地方,都能实现单点登录。如下图:

2)统一的认证系统不是说只有单个的认证服务器。可以存在多个认证服务器,这些服务器甚至可以是不同的产品。认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。
如下图,当用户再访问应用系统1时,由第一个认证服务器进行认证后,得到由此服务器产生的ticket。当他访问应用系统4的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议(如SAML)来交换认证信息,仍然能完成SSO功能

3 WEB-SSO的实现


很多商业软件和开源软件都有对WEB-SSO的实现。其中值得一提的是OpenSSO https://opensso.dev.java.net),为用Java实现WEB-SSO提供架构指南和服务指南,为用户自己来实现WEB-SSO提供了理论的依据和实现的方法。

Web-SSO可以利用Cookie结束来完成用户登录信息的保存,将浏览器中的Cookie和上文中的Ticket结合起来,完成SSO的功能。

 

原文链接:http://blog.csdn.net/javachannel/article/details/752437

参考链接:http://www.cnblogs.com/jillzhang/archive/2008/01/31/1060379.html

posted @ 2012-08-15 19:11  cateatmycode  阅读(569)  评论(0编辑  收藏  举报