APP下载

一个简易单点登录系统的构建与实现

2013-10-10黄伟亮

河北软件职业技术学院学报 2013年3期
关键词:单点开源证书

刘 辉,黄伟亮

(河南机电职业学院 信息工程系,郑州 451191)

0 引言

单点登录是目前比较流行的对多种系统业务进行集成与整合的解决方案之一。所谓单点登录(Single Sign On,简写为SSO),即用户只需在登录时提供一次用户认证信息,通过认证以后,无需再重复登录便可访问其他各子系统应用。IBM对SSO有一个形象的解释,即“单点登录、全网漫游”[1]。对现有的单点登录实现案例及文献[2-4]综合分析显示,对已有系统进行单点登录改造、整合,或基于SSO重新规划设计所有的网络应用,既耗时又耗力,需要付出巨大的代价。虽然市场上已出现了多种专门的SSO商业软件,但价格以及对已有的网络应用支持是否完善等问题,往往使用户望而却步。本文尝试以开源软件为基础,构建一个简易的单点登录系统,来解决局域网中多个应用系统的用户统一身份认证和集中管理问题。

1 应用技术分析

目前,实现单点登录的开源软件主要有OpenSSO、JOSSO、CAS等几种。其中OpenSSO是由Sun公司支持的一个开源的SSO项目,但自从Sun被甲骨文(Oracle)收购,该项目已被关闭并冻结下一步开发[5];JOSSO(Java Open Single Sign-On)也是一个开源的J2EE-based的SSO(单点登录)基础结构,它具有跨平台性,允许整合Java和非Java应用程序[6];CAS(Central Authentication Server)是Yale(耶鲁)大学发起的一个开源项目,旨在为Web应用系统提供一种可靠的单点登录方案,它提供了一个企业级单点登录解决方案,通过独立部署CAS Server及在客户端比如 Java、.Net、PHP、Perl、Apache、uPortal、Ruby 等 Web 应 用 中 加入 CAS Client的方式实现统一认证[7]。CAS实现单点登录的机制见图1。

图1 CAS实现单点登录的机制

当用户通过客户端的Web浏览器访问受保护资源时,嵌入客户端的CAS Client将截取并分析该http请求中是否包含合法的Service Ticket,如果有,则说明当前用户已经登录,允许访问资源;否则,将该http请求重定向到CAS Server登录地址,强制对用户进行认证。在这个过程中,CAS Server主要负责对用户的认证工作。由于CAS具有设计理念先进、体系结构合理、配置简单、客户端支持广泛、技术成熟等优点,本文选用该软件构建单点登录系统。

CAS协议仅仅为基于Web的应用提供了用户信息的认证服务,在实际应用中,CAS Server的认证接口会处理登录用户的凭证(Credentidals)信息,最常见的是用户名/密码,CAS Server可能需要到数据库检索一条用户帐号信息,也可能在XML文件中检索用户名/密码,还可能通过 LDAP Server获取等。出于简单、易于再开发考虑,本文选用的是开源数据库Mysql来集中保存用户信息,并对用户信息进行统一管理。

2 系统结构与流程

根据上述分析,该系统主要由三部分组成:统一用户管理、CAS统一认证服务、各种Web应用(根据需要可集成多个系统)。系统总体结构如图2所示。

图2 系统总体结构

统一用户管理作为该系统独立的一个应用模块,主要负责用户的添加、删除、更新等管理。

统一认证即当用户第一次访问不同的Web应用资源时,将被重定向到CAS统一认证服务器,根据数据库中用户与角色的信息凭证,对其进行检验,如果认证通过,则转向相应的Web应用资源。

3 系统实现

根据上述分析,本文将基于J2EE构建该单点登录系统,采用Tomcat作为Web服务器,结合CAS Server配置统一认证服务,使用数据库Mysql来存储用户与角色信息,并进行相应的应用程序开发,以实现用户添加、删除、更新等管理,至于其他的客户端Web应用,可根据需要自行选择不同的系统结合CAS Client进行配置。

3.1 前期工作

首先,根据服务器配置,正确安装JRE、Tomcat与 Mysql,本 文 使 用 的 是 JRE1.6.0_10+Tomcat 6.0.36+Mysql5.6,然后输入部分用户信息到数据库中,以用于测试。

另外,CAS需要SSL(安全套接层协议)才能正常工作。SSL提供了一种在应用服务器(如Web、Telenet、FTP等)和客户端之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。通过在Web服务器端配置专业的CA机构颁发的证书,实现SSL通信。作为一个局部的应用系统,本文采用J2SE自带的keytool工具,自己生成一个证书。

第一步:生成服务器证书。参考命令格式如下:

keytool-genkey-alias tomcat-keyalg RSA-keysize 1024-keypass changeit-validity 365-storepass changeit-keystore d:ssoserver.keystore

第二步:将证书导入到JDK的证书信任库中。

导入过程包括两个操作,首先是导出证书,然后将其导入到证书信任库,参考命令格式如下:

keytool-export-trustcacerts-alias tomcat-keystore d:ssoserver.keystore-file d:ssoserver.crtstorepass changeit

keytool-import-trustcacerts-alias tomcat-file d:ssoserver.crt-keystore %JAVA_HOME%/jre/lib/security/cacerts-storepass changeit

第三步:将证书应用到Web服务器Tomcat,配置其SSL服务,需要修改server.xml中Connector标签为如下内容:

maxThreads="150"minSpareThreads="25"maxSpareThreads="75"

enableLookups="false" disableUploadTimeout="true"

acceptCount="100"scheme="https"secure="true"

clientAuth="false"sslProtocol="TLS"keystoreFile="d:ssoserver.keystore" eystorePass="changeit"/>

3.2 CAS Server应用配置

统一认证服务的配置相对简单,只需将CAS的相应文件包放到Tomcat服务器的Web应用文件夹即可。

访 问 http://www.ja-sig.org/products/cas/downloads/index.html,下载 CAS 的最新版本。笔者使用的版本是 cas-server-3.4.12。从 CAS 压缩包中找到cas-server-webapp-3.4.12.war文件(在 modules文件夹下),将其复制到Tomcat服务器的webapps目录下,重命名为cas;重新启动Tomcat后,在浏览器地址栏中输入:https://localhost:8443/cas。如果能打开登录页面,则表示CAS应用可以正常启动。之后,根据应用需要,可对用户登录界面进行简单修改,其界面的相应设计文件保存在目录cas/webapp/WEB-INF/view/jsp/default/u及/cas/webapp/css中。

3.3 M ysql数据库的链接与配置

在Mysql数据库中建立一个用户(User)表,用于存放用户的登录信息。表结构如表1所示,包括用户编号、登录名称、登录密码、用户名称、用户描述等。

表1 用户(User)表结构

然后,通过以下步骤配置CAS,应用Mysql数据库进行用户的身份验证。

第一步:复制以下两个文件到CAS/WEB_INF/lib目录下。

cas-server-support-jdbc-3.1.12.jar;mysql-connector-java-5.0.8-bin.jar

第二步:配置CAS/WEB-INF/目录下的deployerConfigContext.xml文件,在该文件中有两处需要修改。

(1)增加数据源

(2)改变认证方式

修改为:

3.4 CAS Client客户端配置

对各种Web应用进行统一认证,是通过将CAS Client加入到客户端模块实现的。下面以基于java的Web应用进行说明。

首先,从 http://www.ja-sig.org/downloads/casclients/CAS Client下载CAS Client的最新版本,比如本文使用的是 cas-client-3.2.1,将压缩包中modules目录下的 cas-client-core-3.2.1.jar文件复制到所发布Web应用的WEB-INF/lib下。然后,在客户端Web应用中修改WEB-INF/web.xml文件,在其中添加应用过滤器,示例如下:

在多种Web应用客户端进行上述类似配置后,当用户通过浏览器第一次访问CAS保护的Web应用时,该http请求就将会被重定向到CAS统一认证服务器(即 https://localhost:8443/cas),要求输入用户名与密码进行认证,从而实现了简单的单点登录与认证。

4 小结

本文基于开源软件所实现的简易单点登录系统,完成了用户的集中管理与统一的身份认证,使得用户输入一次用户名和密码便可访问多个Web应用,从而提高了用户使用系统的效率,改善了用户体验。但是,单点登录(SSO)的部署本身就是一把双刃剑,如果配置不合理反而会使系统的安全性降低。本文所提出的这个系统,在实际应用中还有待于进一步改进,以提高系统的整体安全性。

[1]肖菁.WebSphere环境下的SSO实现之——SSO实现技术准备[EB/OL].(2003-08-01)[2013-05-26].http://www.i-bm.com/developerworks/cn/websphere/library/techarticles/xiaojing/SSOprepare/SSOprepare.htm l.

[2]李凡,王流一.一种基于票据的单点登录协议设计与实现[J].计算机工程与科学,2012(2).

[3]郑伟,王加阳.异构应用的单点登录方法[J].软件导刊,2010(7).

[4]金永勤.在应用整合中单点登录解决方案的研究[J].计算机与现代化,2007(7).

[5]开源中国社区.opensso-单点登录框架[EB/OL].(2008-09-24)[2013-05-26].http://www.oschina.net/p/opensso.

[6]开源中国社区.JOSSO-单点登录框架 -开源中国OSChina.NET[EB/OL].(2008-09-24)[2013-05-26].http://www.oschina.net/p/josso/simila-r_projects.

[7]张涛,王秉坤.使用CAS在Tomcat中实现单点登录[EB/OL].(2008-04-10)[2013-05-26].http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/.

猜你喜欢

单点开源证书
WJCI 收录证书
CSCD收录证书
收录证书
历元间载波相位差分的GPS/BDS精密单点测速算法
收录证书
超薄异型坯连铸机非平衡单点浇铸实践与分析
五毛钱能买多少头牛
数字电视地面传输用单频网与单点发射的效果比较
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0