耶鲁大学开发的单点登录(Single SignOn)系统称为CAS(Central AuthenticationService),是一个独立于平台的,易于理解的开源软件,支持代理功能。SpringFramework的Acegi安全系统支持CAS,并提供了易于使用的方案。
CAS的设计目标
l、为多个Web应用提供单点登录基础设施,同时可以为非Web应用但拥有Web前端的功能服务提供单点登录的功能;
2、简化应用认证用户身份的流程;
3、将用户身份认证集中于单一的Web应用,让用户简化他们的密码管理,从而提高安全性;而且,当应用需要修改身份验证的业务逻辑时,不需要到处修改代码;
CAS的设计和实现
CAS(Central AuthenticationServer)被设计成一个独立的Web应用。它目前的实现是运行在HTTPS服务器上的几个JavaServlet。通过三个URL来访问:Login URL,Validation URL和可选的LogoutURL。下图是CAS的单点登录流程示意图:
为了使用CAS,Web应用重定向它的用户(或简单地创建一个超链接)到LoginURL,例如
https://secure.its.yale.edu/cas/servlet/login。用户也可以手工访问这个URL,如果希望预先验证会话。
LoginURL处理初步的认证工作,它提示用户输入NetID和密码,并用Kerberos服务器校验它们是否匹配。为了接下来能自动重新验证用户身份,CAS也会试图给浏览器回送Cookie(浏览器关闭后会自动过期)。这个Cookie用于识别已经成功登录的用户身份。
使用这个可选的Cookie,CAS可以为用户实现对于多个Web应用单点登录的效果。这就是说,用户只需输入一次他的NetID和密码,即可访问任何使用CAS的资源服务。没有这个Cookie,当Web应用重定向用户到CAS时,用户每次都要输入NetID和密码。(用户也可以通过访问LogoutURL,如
https://secure.its.yale.edu/cas/servlet/logout,来要求CAS删除这个Cookie。)
为了处理初步的身份认证,CAS也记录了用户被重定向时访问的service。可以这样做是因为CAS要求重定向或链接用户到LoginURL的Web应用提供一个service的标志符(在上图中记为serviceID)。如果验证成功,CAS创建一个位数很长的随机数(我们称之为ticket)。CAS把这个ticket和成功登录的用户以及用户要访问的service联系起来。例如,如果用户peon重定向自serviceS,CAS创建ticket T,这个ticket T允许peon访问serviceS。这个ticket是个一次性的凭证;它仅仅用于peon,仅仅用于serviceS,并且只能使用一次,使用之后马上会过期。
一旦完成了初步的身份验证,CAS重定向用户浏览器回到原来的Web应用URL。CAS之所以能记得原来的URL,是因为上面讨论的serviceID作为一个"callbackURL"。CAS重定向用户的浏览器回到原来的URL,并加上上面讨论的ticket作为请求参数。