APP下载

基于Jasig CAS实现图书馆统一身份认证

2012-04-29林伟明

现代情报 2012年9期
关键词:图书馆

林伟明

〔摘 要〕为了解决图书馆各个服务系统的统一认证问题,提出了基于Jasig CAS实现统一身份认证的解决方案,并对其中所涉及的关键技术进行了描述。利用该方案,实现了深圳大学图书馆统一身份认证,为需要实现统一认证的其他图书馆提供了参考。

〔关键词〕统一身份认证;CAS;图书馆

〔中图分类号〕TP391 〔文献标识码〕B 〔文章编号〕1008-0821(2012)09-0134-05

近年来,随着图书馆数字化建设的不断推进,越来越多基于Web的服务系统为图书馆提供服务支撑。如联机公共目录查询系统OPAC、图书馆门户网站、校外远程访问系统EZProxy[1]、下一代互联网校园学习生活交流平台CARSI Portal[2-3]、CALIS中心的应用系统[4]、读者问卷调查系统等。这些服务系统都有自己一套独立的身份认证机制,所使用的技术架构也不尽相同,这样导致用户在使用这些系统时都需要输入用户账号和密码信息,加大了认证复杂度,降低了图书馆服务的易用性。

单点登录,指的是用户登录一次后,可以访问所有互相信任的应用系统而不再需要身份验证。单点登录可以降低认证复杂度,方便用户使用图书馆的服务,提高了图书馆资源的共享率。因此如何实现统一身份认证已成为图书馆亟待解决的重要问题之一。

1 需求及技术思路

目前,深圳大学图书馆为读者提供了OPAC、门户网站、期刊电子资源浏览下载、CARSI Portal、CALIS“E读”、CALIS馆际互借与文献传递、深圳文献港[5]等服务。这些服务所使用的开发技术不尽相同,其中OPAC是采用ASP.NET技术自主研发的;门户网站是采用SupeSite(一款由Discuz开发的PHP+MySql的内容管理系统平台)进行管理;期刊电子资源浏览下载的校外服务,本馆采用了目前被国外广泛使用的实现校外访问代理软件EZProxy;CARSI Portal是由北京大学发起的采用Java技术解决联盟内部进行高校资源共享问题的门户;CALIS“E读”、CALIS馆际互借与文献传递是CALIS(中国高等教育文献保障系统)提供的服务;深圳文献港的开发技术是Java。

这些服务都有各自的应用系统来支撑,而且具有相对独立的身份认证模式。因此本馆需要统一认证方案,来解决用户单点登录问题。

在国内,一些教育机构使用Jasig CAS[6]来解决统一认证问题。如国家科学图书馆[7],北京邮电大学图书馆[8],浙江林学院数字化校园[9],国家科技基础条件平台专项资助的地球系统科学数据共享网[10]。刘峰等基于CAS解决门户单点登陆问题,并提出支持单点退出的改进方案[11]。宋春丽等基于CAS与Web服务对遗留系统进行集成[12]。

国外的一些软件产品[13]如uPortal、Liferay portal、Kuali Workflow、Kuali Notification等集成了CAS客户端,用户在使用这些产品时可以轻松地接入基于CAS的统一认证平台。

因此,本馆拟采用CAS来实现统一身份认证平台。解决思路如下:基于CAS服务器端技术,搭建认证服务平台,同时该平台需要能与本校的一卡通认证方式接入;研究CAS客户端技术,为OPAC、门户网站等加入CAS客户端;研究EZProxy、CARSI Portal、CALIS“E读”、CALIS馆际互借与文献传递、深圳文献港等接入CAS认证平台的问题。

2 基于CAS的统一认证方案

Jasig是一个由教育机构和为高等教育贡献开源软件项目的商业公司组成的联盟。CAS(Central Authentication Service)是由Yale大学发起的一个开源项目,在2004年正式成为Jasig的一个项目。该项目针对应用系统提供了一套安全可靠的企业级单点登录解决方案。

CAS分为服务器端Server和客户端Client两部分。CAS Server需要独立部署,主要负责进行用户身份认证;CAS Client则负责处理对受保护资源的访问请求,当需要用户进行登录时,重定向到CAS Server。图1展示了CAS认证过程。

首先用户通过Web浏览器访问所需的受保护Web应用;该Web应用通过内嵌的CAS客户端把请求转向CAS服务端;CAS服务端判断用户是否已经登录,如果没有则打开认证界面供用户进行身份验证;认证通过后,CAS服务端向Web应用传输生成的票据(Ticket);CAS客户端把取得的票据向CAS服务端请求验证票据;验证通过后,Web应用可以通过CAS客户端向服务端取得认证通过的用户ID,并向用户提供其所请求的服务。

从图1可以看出,CAS的核心就是其票据以及在票据上的一系列处理。

CAS Server支持多种不同类型的认证方式,如数据库认证方式、微软的活动目录方式(Active Directory)、轻量目录访问协议(LDAP)、X.509数字认证、Java验证和授权API(JAAS)方式等。

CAS Client支持多种开发语言(如Java、ASP.NET、PHP等),方便开发者集成到应用系统中。在官方网站上有针对每种语言的开发指南,并提供了相应的例子作为参考。

本文选择CAS来架设深圳大学图书馆统一认证服务平台。平台体系结构如图2。

平台需要独立架设一个CAS认证服务器,并提供HTTPS传输协议。该服务器的认证服务使用深圳大学校园卡中心提供的认证接口,支持校园卡方式登录。在OPAC系统、门户网站中,集成CAS Client,改造验证模式。EZProxy、CARSI门户的认证本身支持与CAS服务端接入,因此只需要根据相关资料进行配置。对于CALIS统一认证中心,需要开发CALIS认证接入API,并在其中集成CAS Client。在CAS认证服务器上,根据深圳文献港认证接入文档,为深圳文献港的认证服务开发OPEN API。

CAS认证服务仅负责用户身份验证及图书馆服务使用权限的判断,对于具体的各应用系统中各模块的权限设置,还是由各应用系统负责。

2.1 统一认证平台服务端的实现

深圳大学拥有校园一卡通系统,因此图书馆的认证服务希望能让用户直接使用校园卡来进行登录。本馆自主开发的OPAC是用ASP.NET进行开发的,里面集成了调用校园一卡通验证的服务。为了重用这服务,提高开发效率,本文选择ASP.NET作为CAS认证服务端搭建的底层技术。

首先需要实现包含CAS Server服务的认证服务端。Jasig CAS的服务端和客户端是使用Java语言编写的,并在官方网站上提供了许多其他语言编写的CAS客户端,但没有ASP.NET版本的服务端实现例子。UliTrampe提供了一套解决方案,使得在ASP.NET上可以模拟实现Jasig CAS的服务端,同时提供客户端调用的例子[14]。本文并将里面的CasAuthenticator.cs,CasServer.cs,CasTicket.cs文件引入服务端项目中。

图2 深圳大学图书馆统一认证平台体系结构

接着在项目中建立一个ASP.NET页面如cas.aspx,用于接收用户浏览器的用户认证请求以及内嵌的CAS客户端的Web应用的票据认证请求。调用CasServer类,由它来处理CAS服务端的所有事务。把cas.aspx的页面表现设计为登录页面,并处理提交的密码验证请求,验证通过后继续交给CasServer类处理验证成功后的工作,如生成票据返回到请求的Web应用页面等。为了不让统一认证服务被恶意使用,增加了应用服务许可列表文件,用于对接入认证的Web应用进行控制。具体的逻辑处理流程如图3所示。

关键步骤及代码如下:

声明cas.aspx页面类需要实现ICasAuthenticator接口;

在cas.aspx页面实现ICasAuthenticator接口的CasCheckPermission方法、CasLogin方法、CasLogout方法、CasTranslateService方法。其中CasCheckPermission加入验证请求使用统一认证的应用是否合法的判断。CasLogin加入标记用户已经登录的处理。CasLogout加入用户注销的处理及注销后跳转的代码。代码如下:

public bool CasCheckPermission(string strUserName,string strService){

CASControlBLL cascbll=new CASControlBLL();

return cascbll.IsEnabledHostName(strService);∥判断应用是否合法

}

public void CasLogin(string strUserName,bool doRemember){

FormsAuthentication.SetAuthCookie(strUserName,doRemember);∥标记已经登录

}

public void CasLogout(){

FormsAuthentication.SignOut();∥用户注销

…∥注销后跳转处理

}

在cas.aspx页面服务端代码的PagezLoad方法中,加入:

CasServer.HandlePageLoad(this);

在cas.aspx中设计登录界面,并在服务端代码中处理登录请求。关键代码如下:

protected void btnSubmitzClick(object sender,EventArgs e){

string strUserName=this.txtcardno.Text;∥取得用户输入的校园卡号

string strPassWord=this.txtPass.Text;∥取得用户输入的密码

string strCCode=this.txtCode.Text;∥取得用户输入的验证码

if(PerformAuthentication(strUserName,strPassWord,strCCode)){∥验证用户

∥判断此次请求是否是CAS请求,并处理此次请求

if(CasServer.HandlePageLogin(this,strUserName,false))return;

∥不是CAS请求,则按普通认证成功处理

FormsAuthentication.RedirectFromLoginPage(strUserName,false);

phErrorInfo.Visible=false;

}

else{

∥显示出错信息

phErrorInfo.Visible=true;

}

}

为了增强统一认证平台的安全性,在登录页面增加了验证码技术。此外,图书馆向提供SSL证书服务的公司购买了SSL安全证书,并根据该公司提供的在IIS服务器上的安装文档,为认证平台架设了HTTPS传输协议。

统一认证平台提供了根据校园卡号取得包括姓名、单位等用户信息的Web服务,为有需要的应用提供服务。

2.2 各应用系统接入统一认证平台的实现

2.2.1 OPAC接入统一认证平台

为了使OPAC接入统一认证平台,需要改进OPAC原有的用户认证程序,使用CAS客户端技术与统一认证平台进行认证交互。首先在OPAC项目中加入UliTrampe所提供的CasClient.cs文件,然后修改OPAC的用户认证程序,使得OPAC在需要检测用户的登录状态时,把请求发往统一认证平台。用户登录后,OPAC从统一认证平台取得用户的校园卡号,并在数据库中检测该用户是否具备访问的权限。关键代码如下:

protected void PagezLoad(object sender,EventArgs e){

if(islog){

∥登录成功,跳转

}

else{∥向统一认证平台发请求,判断是否已经登录了

if(CasClient.HandlePageLoad(CASConfigHandle.GetCASLoginURL(),CASConfigHandle.GetCASValidateURL(),CASConfigHandle.GetCASServerURL(),out strUserName, out strErrorText)){

if(strUserName!=″″){

∥返回了用户名,说明在统一认证平台验证通过

∥判断用户的权限,并进行登录成功后的相关处理

∥登录成功后跳转

}

}

}

}

2.2.2 图书馆门户接入统一认证平台

使用基于PHP的CAS客户端phpCAS来实现图书馆门户的认证接入。首先从Jasig CAS的官方网站下载phpCAS,并在需要验证用户是否登录的页面加入关键代码:

requirezonce(″CAS.php″);--导入phpCAS

phpCAS::client(CASzVERSIONz2z0,′localhost′,8443,′cas′,true);--填写CAS服务端的地址、端口

phpCAS::setNoCasServerValidation();

phpCAS::forceAuthentication();

if(phpCAS::isAuthenticated()==true){--登录成功后可通过phpCAS::getUser()取得认证后的用户卡号}

else{--认证失败处理}

2.2.3 EZProxy接入统一认证平台

EZProxy支持多种认证方式,其中包括CAS认证方式。在EZProxy的安装目录下,打开user.txt,对原来的登录方式进行注释,并加入如下配置代码:

::CAS

LoginURL http:∥cas服务端登录地址

ServiceValidateURL http:∥cas服务端票据验证地址

/CAS

修改后重新启动EZProxy服务,让上述配置代码生效。

2.2.4 CARSI Portal接入统一认证平台

CARSI Portal的认证方式是基于Shibboleth项目[15]。Shibboleth包括2个主要的组件:身份提供者(Identity Provider,简称IdP)和服务提供者(Service Provider,简称SP)。其中Idp主要负责对用户身份进行认证和对用户属性进行管理,并且支持CAS认证接入。所以只需要在深圳大学图书馆的IdP中配置为CAS认证,填写相应的CAS服务地址及票据验证地址,就可以达到接入的要求。

此外,还需要在认证平台上,开发用于传递用户属性的Web服务。然后根据CARSI的文档,使用Java语言开发UserAttributeService类、UserAttribute类,提供给CARSI调用取得用户属性。UserAttributeService的关键代码如下:

public static UserAttribute getUserAttribute(String cardNo)throws AxisFault{

…∥采用Axis2的OM调用方式调用ASP.NET提供的Web服务

OMElement responseresult=response.getFirstElement();

∥运用BeanUtil的processObject方法把Web服务结果的转为CARSI需要的UserAttribute类

UserAttribute ua=(UserAttribute)BeanUtil.processObject(responseresult,UserAttribute.class,null,true,new DefaultObjectSupplier());

return ua;

}

2.2.5 CALIS认证接入统一认证平台

CALIS为其提供的公共服务应用系统架设了统一认证平台,因此本文根据CALIS认证平台接入文档,开发深圳大学图书馆接入CALIS认证平台的登录验证接口以及授权验证接口,并让登录验证接口与深圳大学图书馆统一认证平台接入,从而达到单点登录的目的。需要增加一个页面logincalis.aspx,用于接入统一认证平台,其关键代码与OPAC中的登录页面关键代码类似。需要一个页面idp.aspx,用于接收CALIS的SP转发的登录认证请求,在该页面加入的功能。关键代码如下:

protected void PagezLoad(object sender,EventArgs e){

∥接收CALIS发送的sp,goto,idp参数

if(已经登录){

∥如果已经登录了,生成CALIS要求的artifact参数并附加在sp地址上,把请求转发到sp地址上。

}else{

∥没有登录,将请求转发给logincalis.aspx

string returnurl=Request.Url.OriginalString;

Response.Redirect(″../logincalis.aspx?ReturnUrl=″+HttpUtility.UrlEncode(returnurl));

}

}

需要一个页面loginvalidservice.aspx,用于处理CALIS的SP发过来的授权验证请求,在该页面往统一认证平台发送票据验证请求。关键代码如下:

protected void PagezLoad(object sender,EventArgs e){

∥接收CALIS发送的artifact参数

if(artifact参数是否合法){

∥如果合法,生成CALIS要求的用户信息。

}else{

∥告诉CALIS不合法的原因。

}

}

3 应用效果

如图4所示,访问深圳大学图书馆统一认证平台所保护的服务系统时,在没有登录前,系统都跳转至统一认证界面,认证通过后,用户访问这些服务系统不再需要进行二次登录。

图4 深圳大学图书馆统一认证效果

实践证明,深圳大学图书馆的各个应用服务可以使用基于CAS的统一认证平台来对用户身份认证进行集中管理,只要在平台上登录一次,就可以访问统一认证平台控制下的所有应用,实现远程单点登录访问,提高了资源的共享率,减轻用户登录系统使用繁琐的负担。

4 结 语

本文选取Jasig CAS技术来架设、开发与部署统一认证服务平台,有效地解决了深圳大学图书馆统一认证问题。用户一次登录后就可以无缝访问所有受保护的Web应用服务,减少了用户的认证复杂度,节省了用

户的精力,提高了效率。对于其他需要接入统一认证服务平台的应用系统,只需要根据自身的程序语言,集成相应的CAS客户端就可以进行接入,简单方便。此外,方案中采用HTTPS作为认证信息的传输协议,安全可靠。目前,该认证平台已经正式在深圳大学图书馆使用,其他高校可借鉴此方案来解决多个系统间的统一认证问题。虽然统一认证服务减轻了用户认证的负担,但用户使用图书馆的服务仍然不是太方便。随着云计算概念的出现,未来图书馆的各种应用服务应提升至云服务平台,读者仅需要登录云服务平台就能享受图书馆提供的各类服务。

参考文献

[1]EZProxy[EB/OL].http:∥www.oclc.org/us/en/ezproxy/,2012-02-17.

[2]CARSI[EB/OL].http:∥www.carsi.edu.cn/zh/,2012-02-17.

[3]Carsi Portal[EB/OL].http:∥ds.carsi.edu.cn/portal/,2012-02-17.

[4]CALIS[EB/OL].http:∥www.calis.edu.cn/,2012-02-17.

[5]深圳文献港[EB/OL].http:∥www.szdnet.org.cn/,2012-02-17.

[6]Jasig CAS[EB/OL].http:∥www.jasig.org/cas,2012-02-17.

[7]许雁冬,李宇.国家科学图书馆单点登录系统设计与实现[J].现代图书情报技术,2009,(10):28-33.

[8]王庆恒,马自卫,李高虎.统一检索服务关键技术的研究与实现[J].现代图书情报技术,2010,(4):18-23.

[9]李遥,朱晓芸,杨枨.异构系统统一数字平台的构建[J].计算机工程,2005,31(5):230-233.

[10]刘润达,诸云强,宋佳,等.一种简单跨域单点登录系统的实现[J].计算机应用,2007,27(2):288-291.

[11]刘峰,王峥,曹华平,等.基于CAS的门户单点登录方案[J].计算机系统应用,2011,20(6):77-102.

[12]宋春丽,张仁津,谢刚.基于CAS与Web服务的遗留系统集成框架研究[J].武汉大学学报:理学版,2011,57(5):424-428.

猜你喜欢

图书馆
去图书馆坐坐
图书馆
图书馆里送流年
图书馆
夜间的图书馆
图书馆里的小惊喜
图书馆 Library
时间重叠的图书馆
图书馆
飞跃图书馆