从上面的图可以看出,要实现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