1. 引言
随着海洋信息化的不断发展,自然资源部北海局内部逐步建立了为海洋管理业务服务的各类信息系统。这些系统建设技术选型各异,每个系统都有独立的认证体系和用户管理模块。用户在使用各个系统时,需要清楚记住每个系统的账户信息并逐一登录认证,这样不仅增大了用户管理的难度,而且不利于系统的安全管理。
基于CAS模式的单点登录系统,在实现一点登录、多点应用的同时,提供统一简便的用户管理,只有通过安全认证且获得使用权限的用户才能访问信息系统,不仅方便用户登录及管理,而且有效提高系统安全性能,保证系统资源的高效实用。
2. 系统设计方案
目前自然资源部北海局信息化软件系统主要包括3大类系统:基于Java平台的B/S结构应用系统、基于.NET平台的B/S结构应用系统和基于.NET平台的C/S结构应用系统。第一类系统在设计开发时就已充分考虑单点登录的问题,通过在系统配置文件中增加过滤器及监听器等代码,实现CAS单点登录;第二类系统在集成CAS单点登录时是结合表单认证方式完成的,这种方式在用户访问系统资源时会出现循环重定向问题,需要通过配置系统会话状态实现会话数据的保存,避免因用户票据数据丢失造成单点登录失败;第三类系统受系统开发框架限制,无法通过Cookie存储用户验证信息,针对这种情况考虑采取集成基于REST (Representational State Transfer,表现层状态转化)架构的RESTful API接口,实现客户端与服务器端的用户信息交互,以此完成系统登录工作 [1] 。整个系统结构如图1所示。
3. CAS单点登录
3.1. CAS认证原理
CAS (Central Authentication Service,中央认证服务)是Yale大学发起的一个旨在提供企业级单点登录解决方案的开源项目,CAS协议经过3个版本的不断提升,成为目前比较流行的针对Web应用的开源单点登录框架,它具有易用、跨平台、可扩展等特点。CAS框架包括CAS客户端和CAS服务端两部分,CAS服务端是需要对应部署的Web应用,负责对用户进行认证并颁发证书;CAS客户端需要部署在Web应用中,可支持Java、Php、.Net等多种语言编写的Web应用,负责处理对Web应用中受保护资源的访问请求。
CAS协议是基于票据(Ticket)的方式实现安全认证的,Ticket是CAS客户与CAS服务端通信的重要凭证,CAS服务端通过验证Ticket信息来判断用户是首次请求认证还是已通过认证,认证原理如图2所示 [2] 。用户通过浏览器访问应用系统时,部署在应用系统中的CAS客户端接收到访问请求后,会分析请求中是否含有ST (Server Ticket,服务票据),如果有说明用户已登录,将跳到图2的Step4;如果没有,浏览器将重定向到CAS服务端。CAS服务端的TGS (Ticket Granting Service,票据授权服务)将对用户Cookie中的TGT (Ticket Granting Ticket,票据授权票据)进行验证,验证通过则返回ST到CAS客户端,跳到图2的Step4;验证不通过,则向浏览器返回登录页面。用户在登录页面中输入用户名和密码,提交到CAS服务端由AS (Authentication Service,认证服务)进行验证,验证成功后CAS服务端会在用户浏览器设置一个TGC (Ticket Granting Cookie,票据验证凭证),用于存放包含用户身份信息的TGT,以便后期验证用户是否已登录,同时生成唯一的ST返回给用户。用户携带ST通过CAS客户端重定向到CAS服务端,对ST的合法性进行核实,验证成功后返回用户名,验证失败则返回错误信息 [3] [4] [5] 。

Figure 2. CAS certification schematic diagram
图2. CAS认证原理图
3.2. 单点登录平台搭建
单点登录(Single Sign-On,简称SSO),通过统一认证平台同时为多个应用系统提供登录认证服务,能够实现在多个应用系统中,用户只需要登录认证一次就直接访问已授权的系统,而不需要在访问每个系统时进行身份认证。基于CAS模式实现的单点登录平台认证流程如图3所示 [6] 。
CAS单点登录认证平台包括服务端和客户端,CAS服务端是基于Https协议与CAS客户端进行交互完成对用户的安全认证,搭建一套完整的认证体系主要包括三个步骤:安全设置、服务器定制和客户端配置 [7] 。

Figure 3. Single sign-on authentication flow chart
图3. 单点登录认证流程图
安全配置:首先需要修改CAS服务端所在中心认证服务器的Tomcat环境配置,在conf/server.xml文件中启用SSL (Secure Sockets Layer,安全套接层)功能,然后利用JDK (Java Development Kit,Java开发工具包)自带的keytool工具生成证书,将证书以文件的方式导入到CAS服务端和CAS客户端,使双方具有Https通信能力。这个证书是CAS客户端与CAS服务端安全交互的重要保证,通信双方以此证明自己的合法性。
服务器定制:将CAS-Server源代码安装部署到中心认证服务器的Tomcat中即可完成CAS服务端的初步配置。在实际应用中,需要CAS服务端能够读取指定数据库中的用户信息进行安全验证,可以通过修改CAS-Server目录下的WEB-INF/deployerConfigContext.xml文件,配置认证数据源和验证选项来实现。CAS认证数据源支持单数据库、多数据库及域账户等多种方式,用户可以根据系统实际应用需求进行自定义配置。
客户端配置:下载CAS-Client源代码,根据项目实际应用需要将相应的jar包导入应用系统的WEB-INF/lib下,同时在应用系统的web.xml文件中增加CAS认证过滤器,将用户访问请求定向到CAS认证平台中进行安全认证。
4. 应用系统集成
4.1. 基于Java平台的B/S系统集成
这类系统与CAS单点登录系统结构嵌合度较高,集成难度相对较低,按照CAS客户端配置方法对系统配置文件进行修改后即可完成系统单点登录的集成,登录流程如图4所示。用户首次访问系统,由于未通过认证,系统将跳转至配置文件中指定的casServerLoginUrl地址(即CAS服务端登录认证中心),在CAS服务端认证完成后,CAS服务器将在系统访问地址(需要配置文件中指定serverName)后添加ticket并返回CAS客户端,CAS客户端接收后会再次向CAS服务端发起ticket验证,CAS服务端验证通过返回成功信息后,CAS客户端将打开受保护页面,登录完成。

Figure 4. System login flowchart based on Java platform
图4. 基于Java平台的系统登录流程图
4.2. 基于.NET平台的B/S系统集成
此类系统在集成到CAS单点登录系统中时,会因用户票据失效而发生循环重定向问题,导致用户验证后依然无法正常访问系统资源,考虑通过会话配置保证用户票据的有效性,进而实现用户单点登录,登录流程如图5所示。用户登录系统时,首先重定向到CAS认证中心进行用户验证,验证通过后将用户重定向到系统页面,在此过程系统通过对用户ST进行验证来过滤每一次访问请求,进而实现对系统功能页面的控制。通过对系统SessionState的配置,启用系统会话状态,开始.NET平台的状态服务,保证会话状态持久,从而在系统进行用户ST验证时提供有效的用户票据,实现用户的单点登录。

Figure 5. System login flow chart based on .NET platform
图5. 基于.NET平台的系统登录流程图
4.3. 基于.NET平台的C/S系统集成
CAS验证是基于浏览器Cookie存储验证信息进行用户认证,此类系统受设计框架限制,不具备Cookie容器,针对此类系统考虑利用RESTful API接口实现系统的CAS登录,登录流程如图6所示。用户通过客户端登录时,首先提交用户名、密码和Service参数至CAS认证中心,验证成功后返回用户TGT至客户端,客户端根据TGT获取用户ST进行验证登录,此种方式与传统CAS认证方式的区别在于TGT存储方式的不同,客户端利用RESTful API接口解决了C/S系统因不具有Cookie容器无法存储用户验证信息的问题,实现了用户在客户端和浏览器之间的登录状态的传输。

Figure 6. System login flowchart based on RESTful
图6. 基于RESTful的系统登录流程图
4.4. 基于CAS模式的北海局单点登录平台
利用CAS单点登录技术完成上述自然资源部北海局现有的3类信息系统的集成,形成基于CAS模式的北海局单点登录平台,实现北海局信息系统的一点登录,多点应用。登录平台如图7所示,账户信息验证如图8所示。

Figure 7. Schematic diagram of login platform
图7. 登录平台示意图

Figure 8. Schematic diagram of account information verification
图8. 账户信息验证示意图
5. 总结
本文阐述了基于CAS模式的单点登录系统的设计与分析。在对CAS认证服务进行充分研究的基础上完成单点登录平台的搭建,结合自然资源部北海局业务应用系统现状,就现有异构业务应用系统如何实现单点登录的问题进行分析研究,归纳总结出系统配置、参数登录和RESTful API集成三种单点登录平台集成方式,以此逐步整合已有应用系统的用户认证登录,规范新开发应用系统,提高用户登录效率。此外,通过域账户与单点登录平台的集成,也可以实现多系统的集成登录,基于域账户的CAS认证方式将有助于进一步规范系统用户的管理,进一步提高系统集成度。