统一身份认证服务器的研究与实现
2011-11-07洪丹丹
洪丹丹
(西安交通大学 信息与网络中心,陕西 西安 710049)
统一身份认证服务器的研究与实现
洪丹丹
(西安交通大学 信息与网络中心,陕西 西安 710049)
目前解决恶意用户非法操作的手段之一为身份认证。经过对访问应用的用户进行认证,保证只有通过认证的用户才能访问指定资源。同时为了保证无需多次注册登录就可以在多个应用之间切换,享受各应用提供的服务,单点登录统一身份认证被广泛应用。本文详细研究了JA-SIG CAS统一身份认证系统的工作原理及其实施部署过程,对其中的关键技术进行了详细描述。
统一身份认证;CAS;单点登录
一、引言
为保证只有指定的或者通过认证的用户才能访问系统受保护的资源,以往多数应用程序如Web应用,都采用用户注册机制来进行控制,如只有已注册用户,凭密码登录系统之后,才能访问Web敏感资源。但是随之产生的问题也不容忽视。因为随着网络和各种便携式移动网络终端的普及,Web应用的数量急剧增长。如果在访问Web应用时,都需要注册一次,且每次访问不同Web应用时,都需进行登录操作,这是非常麻烦的事情。因此国内外研究学者们便提出使用户只注册一次并登录一次,就可以在多个应用之间进行访问的思想,因此单点登录统一身份认证技术被广泛地应用起来。其原理如图1所示。
单点登录统一身份认证关键作用在于每个Web 应用并不直接认证用户,而是将用户认证委托给一个独立的单点登录服务器完成。这样既可以减轻Web应用的负担,同时认证用户的真实性就更加可靠,因为第三方的认证服务器多数都是可信任的。[1]认证过程如下:[2]
(1)浏览器请求Web应用程序的某个受保护的资源;
(2)Web应用如果发现用户尚未经过认证,就将用户导向到SSO(Single Sign On,单点登录)服务器登录地址;
(3)浏览器被重定向到SSO服务器的登录页面,并提示用户输入用户名和口令;
(4)如果用户名和口令被SSO服务器成功认证,则SSO服务器将浏览器重定向到原Web应用的服务器,并且在URL(统一资源定位符)参数中包含一个票据;
(5)Web应用获得了浏览器传来的票据后,连接SSO服务器,检查票据是否有效;
(6)SSO服务器若验证票据成功,则返回一个肯定的回复给Web应用,整个验证过程接受。
从上面的过程可以看到,用户认证并不是通过Web应用本身完成的,而是委托给SSO服务器完成的,因此,有多个Web应用时,用户始终使用一个用户名和口令通过SSO服务器登录,这就是单点登录的实现。此外,用户看不到第5、6步,即Web应用和SSO服务器通信的过程。由于只有SSO服务器才知道用户名和票据的关系,因此用户无法伪造票据。要保证用户无法猜出SSO服务器生成的票据,SSO服务器生成的票据就必须非常随机,以确保整个系统的安全。
由于单点登录只能解决用户的身份认证问题,所以授权工作则交给其他对象来完成。本文将以JA-SIG CAS3.0协议为技术,实现单点登录统一身份认证的目标。
二、统一身份认证系统工作机制
单点登录统一身份认证的过程意在从入口级保证Web应用的安全。本文将研究采用开源的JA-SIG CAS3.0协议实现单点登录统一身份认证。
从物理体系结构上分析,统一身份认证服包含两个部分:CAS服务器 和CAS客服端。CAS服务端需要独立部署,主要负责对用户的认证工作;CAS客服端负责处理对客户端受保护资源的访问请求,需要登录时,重定向到CAS服务器。CAS最基本的协议过程时序如图2所示。CAS客户端与受保护的客户端应用部署在一起,以过滤器方式保护敏感资源。
在该协议中,所有与 CAS的交互均采用 SSL协议,确保服务票据和TGC的安全性。协议工作过程中会有2次重定向的过程,一次是重定向用户请求到CAS服务器,另一次是将已通过认证的用户请求重定向到其所欲访问的网络地址。CAS服务器和客户端之间的票据验证和重定向过程均不为用户所见,对用户是透明的。
此外,对于更加复杂且安全性要求更高的情况,可是使用CAS协议中为用户提供的代理模式来完成此目标。本文不涉及该代理模式,因此不予具体研究。
在该协议中,所有与CAS的交互均采用SSL协议,确保ST和TGC的安全性。
三、统一身份认证服务器的实现
1.软件的获取
JA-SIG CAS是一款开源的单点登录统一身份认证软件,它为企业提供开源且具有良好结构的协议;且其开源Java服务组件可以为用户提供二次开发的可能;与之相对应的客户端有多种,如 Java,.Net,PHP,Perl,Apache,Uportal等。
2.构建用户信息库
CAS服务器的认证依据是保存在服务器上的用户信息库。当用户提交的认证信息与此信息库的内容相匹配时,CAS服务器才会返回一个true或false,表明用户身份的真假。
由于CAS服务器支持多种认证方式,如LDAP认证,JDBC认证及XML文件认证等,因此CAS提供了一种灵活但统一的接口域实现分离的方式,实际使用中CAS采用哪种方式认证是与CAS的基本协议分离开的,用户可以根据认证的接口去定制和扩展。当用户信息相对稳定,变化较小时,可以采用轻量级目录服务器LDAP,提高系统检索效率;当用户信息需经常变动时,可采用数据库存储;当用户信息量较小时,可以采用普通的XML文件方式。
本文为保证用户密码安全,要求用户在一定时间内必须修改自己的密码,因此采用JDBC认证方式,且使用MySQL数据库构建用户信息库,其表结构如图3所示。
3.统一身份认证服务器的关键技术实现
(1)配置 HTTPS 协议
统一身份认证服务器之所以要配置HTTPS协议,是因为它是一个http的安全版,具有安全的通信信道。使用它可以解决:在统一身份认证服务器和客户端之间建立安全的数据通道,实现客户端与服务器二者之间的相互身份认证。[3]其具体配置流程如图4所示。具体实施步骤请参考文献。[4]
(2)部署 CAS Server
CAS Server是一个Web应用包,将前面下载的casserver-3.1.1-release.zip解开,把其中的cas-server-webapp-3.1.1.war拷贝到 tomcat的webapps目录,并更名为 cas.war。由于前面已配置好 tomcat的HTTPS协议,可以重新启动 tomcat,然后访问:https://localhost:8443/cas,如果能出现正常的CAS登录页面,则说明CAS Server已经部署成功。
虽然CAS Server已经部署成功,但这只是一个缺省的实现,在实际使用的时候,还需要根据实际概况做扩展和定制,最主要的是扩展认证 (Authentication)接口和CAS Server的界面。界面在cas/WEB-INF/view/jsp/default。
(3)扩展认证接口
如果用户的信息量比较大,一个单纯的XML文件就不能满足频繁且大量的用户信息查询过程。因此可以通过配置一台专门的用户数据库,保存其用户名及密码(JA-SIG CAS系统默认已用户的密码来进行身份信息的认证)。如果用户名和密码信息被修改的概率比较低,且不频繁,可以使用轻量级目录服务器LDPA来建用户信息库。如果为了保证用户身份的真实性,即保证能过户的密码安全,要求用户定期或不定期的修改自身密码,那么当频繁地修改操作,采用关系数据库MySQL就比较方便。因为轻量级LDPA在进行信息修改时,没有MySQL进行得容易。
本文以使用MySQL数据库存储用户信息为例,实现扩展认证接口的关键技术如下:
用编辑器打开%CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,找到
2013年5月28~31日,我们来到五岳之首泰山脚下,齐聚在泰安田雨润华国际酒店,召开了“中国腐植酸工业协会第五届第五次理事会暨腐植酸本源性功能肥料可持续发展论坛”。
注释掉该行,在其下加入:
添加一个新bean:
destroy-method="close'>
拷贝cas-server-jdbc-3.0.5-rc2.jar和mysql-connectorjava-3.1.12-bin.jar到%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。
(4)配置 CAS客户端
统一身份认证服务器建设完毕之后,如果某应用程序需使用该认证服务器进行用户身份认证,需在该应用程序的类库中加入统一身份认证客户端的jar文件(通常名为casclient.jar,并可在网络上下载到),并在应用程序配置文件中进行统一身份认证服务器客户端的配置。具体如图5所示。
四、结束语
统一身份认证技术已成为当今网管及研究人员的关注重点。如何搭建高效的CAS服务器、实现用户身份的认证是保证网络应用安全的首要问题。本文结合统一身份认证原理,详细介绍了CAS服务器的搭建过程及相关关键技术,介绍了如何扩展CAS服务器的接口,使之有效地与外界数据库进行整合 (如 MySQL,LDPA等),并以链接MySQL数据库为例,介绍用户库的设计与实现。最后对CAS服务器的客户端配置和页面扩展进行了陈述。
[1]嵇智辉,倪宏,刘磊等.一种基于双令牌机制的单点登录模型研究[J].计算机工程与应用,2008,44(30):131-134.
[2]廖雪峰.Spring2.0核心技术与最佳实践[M].北京:电子工业出版社,2007:120-200.
[3]茹惠素.基于HTTPS协议的统一登录系统设计与实现[J].浙江工业大学学报,2008(36):527-530.
(编辑:杨馥红)
G482
B
1673-8454(2011)03-0016-03