CAS最早是美国耶鲁大学的开源项目,从CAS 3.0开始成为JASIG组织的项目。目前最新版本是3.1。CAS是通过JAVA的Servlet技术和Spring框架实现单点登录功能,得到了众多第三方软件的支持,很多系统都提供了CAS的认证插件,大部分的Portal系统都提供了CAS的SSO模块。同时,CAS官方网站也提供了众多语言的客户端,使用起来非常方便。
CAS体系结构
CAS的体系由3个部分构成:CAS服务器,CAS客户端(多个)和用户(多个)。
CAS服务器:需要使用Servlet容器独立部署,可以提供用户身份验证服务,为已经登录的用户下发令牌(Ticket),为CAS客户端提供令牌验证服务。
CAS客户端:可以是基于Web的应用系统和网站,需要其认证部分支持CAS协议。其中CAS官方已经提供了JAVA、DotNet、Acegi,JSP,ColdFusion,Perl,PHP,RoR,Zope等语言的客户端,同时在它的官方站上还可以找到很多第三方提供的客户端。
用户:指在CAS服务器上拥有账户,并且准备访问CAS客户端中需要授权的应用或者资源的用户。
CAS协议
CAS协议从CAS v1到目前的CAS v3,基本思想都是 Kerberos 的票据方式实现SSO。
CAS协议从版本2开始使用XML规范,极大方便了CAS协议的扩展,并且在自己开发客户端的时候,可以使用dom简单编写一个CAS的客户端程序。
用户在访问SSO系统的一个受保护应用(CAS的客户端)的时候,CAS客户端会重定向用户的访问到CAS服务器,CAS服务器会检查用户是否已经在CAS上登录,如果是登录的状态,则将用户请求再次重定向回CAS客户端服务器,并且在重定向的URL中包含下发的一个用户令牌(Ticket)。CAS的客户端取出URL中的Ticket,并且使用这个Ticket到CAS服务器进行Ticket校验,CAS服务器检查Ticket 是否合法,如果是合法的,则返回验证成功的结果,并且将用户名传送给CAS客户端。整个过程如图所示。
在整个验证过程中,用户的密码没有传送给CAS客户端服务器,用户提交给CAS客户端服务器的是Ticket,而每个Ticket都是一次性的,所以最大限度地保证了用户的安全。而对统一认证客户端的安全性就会降低要求,因为客户端的不安全不会影响到该用户在其他系统上的信息安全,而LDAP方式则不同,密码交给了客户端,如果客户端不安全,用户的密码就可能泄露,而该用户在所有基于该密码的系统中的数据都会变得不安全。
CAS服务器
CAS服务器是使用JAVA语言开发的,基于Spring框架的一个Servlet应用,使用普通的Servlet容器就可以正常部署运行。CAS服务器使用的MVC架构的持久层可以使用自带的内嵌数据库,也可以使用任何支持JDBC的关系数据库。整个应用的主要配置集中在WEB-INF/deployerConfigContext.xml文件中,该文件就是普通的Spring的Bean声明文件,定制起来非常方便。
同时,CAS服务器还提供了包括JDBC,LDAP,OpenID,Radius,x509等主流的多种认证处理器。在使用的时候,只要将这些处理器加入到认证管理器的List中就可以让CAS服务器支持该种认证数据源。
东北大学的统一认证服务器在部署的时候,选择了Linux CentOS5+ Tomcat+Apache+MySQL作为系统平台,认证处理器使用了JDBC和LDAP数据源,并且定制了CAS的Service管理和用户属性功能。
CAS客户端
CAS官方提供的客户端程序使用非常方便,只要配置CAS服务器的URL和客户端应用的URL就可以使用。但是需要注意一点,CAS服务器运行的是HTTPS协议,而使用的服务器证书一般是自签发证书,客户端的SSL对CAS服务器的证书并不信任,所以必须将CA证书导入到客户端环境的可信证书列表中,才可以让CAS客户端和CAS服务器正常运行。CAS服务器和CAS客户端的通信报文是遵循XML规范的,所以要确保客户端语言环境中拥有XML解析模块。
(作者单位为东北大学信息网络中心)
来源:《中国教育网络》2009年07月刊
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。