单点登录(SSO,Single Sign-on)是一种方便用户访问多个系统的技术,用户只需在登录时进行一次注册,就可以在多个系统间自由穿梭,不必重复输入用户名和密码来确定身份。单点登录的实质就是安全上下文(Security Context)或凭证(Credential)在多个应用系统之间的传递或共享。当用户登录系统时,客户端软件根据用户的凭证(例如用户名和密码)为用户建立一个安全上下文,安全上下文包含用于验证用户的安全信息,系统用这个安全上下文和安全策略来判断用户是否具有访问系统资源的权限.
目前业界成熟的sso产品有很多,
有收费的,ibm的portal等,也有开源的,sun的open sso等。
我们用ja-sig的cas来做sso的实现。
cas以前由米国yale大学开发,后来由ja-sig组织进行了重构
官方网站地址http://www.jasig.org/,大家可以在其网站上找到相关的代码及文档。
这里我们采用的server端为3.4.2,客户端为3.1.1。
以下是cas的典型应用场景:
假设你运营了一个网站,同时与你这个网站相关,你架设了一个论坛,
用来进行网站用户的日常交流。这个网站与论坛分别部署在不同的javaweb容器上
因而session不能共享,或者共享起来相当困难。
在没有采用sso技术以前,
登陆网站,用户需要输入用户名,密码;登陆网站后,用户点击网站上的论坛链接,
进入论坛的相关页面,发现自己在论坛没有登陆,需要再次输入用户名密码进行校验。
这两个用户名与密码可能相同,也可能不同,取决于你的系统的实现方式。
这种情况会以起以下的极端问题:
假设某大型企业底下有N个子系统,
每个系统都有自己的用户名,密码及其相关的管理,验证机制,那么,用户要记住每个子系统的用户名与密码是多么麻烦的事情;
或者,你可以把每个子系统的用户名,密码都统一起来,不管采用什么方式,进每个子系统只需要输入相同的用户名,密码就行。
这样,用户在登陆每个子系统的时候,都需要输入用户名,密码,
体验极差。
sso技术可以解决这个问题,
在用户登陆网站后,点击网站上的论坛链接进入论坛,
这时用户发现自己已经登陆进去了,不需要再次输入用户名密码,相当方便。
OK,体会到sso技术的方便之处了么?