基于DotNetNuke的图书馆门户统一认证研究和实现
王勇
北京第二外国语学院图书馆 北京 100024
摘要

主要介绍基于DotNetNuke的数字图书馆门户系统的统一认证系统的研究和实现,详细阐述该统一认证模式的工作机制和实现各异构平台单点登录的工作流程。此外,图书馆门户的登录模块是实现上述功能的核心,因此重点介绍DotNetNuke登录模块的开发方法。

关键词: DotNetNuke; 图书馆门户; 统一认证
中图分类号:G250
Research and Implementation of SSO of Library's Portal Based on DotNetNuke
Wang Yong
Library of Beijing International Studies University, Beijing 100024, China
Abstract

The paper introduces the research and implementation of the centralized authentication of the library portal system, and describes the mechanism of centralized authentication as well as the workflow of SSO. Meanwhile, it also elaborates the development method of the login module of DotNetNuke, the core of the realization of the SSO.

Keyword: DotNetNuke; Library portal; SSO
1 引 言

随着校园和图书馆信息化建设的不断深入,越来越多的独立、异构的信息系统不断涌现,图书馆的信息环境因而日趋复杂,图书馆不得不应对各平台系统之间的用户鉴权授权、数据交换等信息交互带来的安全、效率和管理等方面的问题。对读者而言,每访问一个应用系统就要使用一个不同的用户名和密码,这大大降低了用户的使用体验质量。因此,如果能够解决用户和认证的统一问题,就能尽可能地减少读者需要记忆的用户名和密码,从而提高各系统的协作性和整体性,为读者提供个性化服务,同时也可以提高工作效率,降低管理成本。

解决统一认证的通常做法是建立统一认证中心,由统一的认证系统或模块为各应用系统进行身份认证,用户只需一次认证,便可直接访问多个系统,如采用CAS协议和架构开发的统一认证系统[ 1, 2]、基于SSH框架设计的统一认证平台[ 3]、基于WebService服务接口的集成系统[ 4]等。但是该方式需要屏蔽掉每个应用系统的登录入口[ 1],对现有的应用系统改动较大。笔者通过开发DNN(DotNetNuke)门户的登录模块,以数字化校园为源头,以数字图书馆门户为中心,以LIS为基础,采用基于认证源的二次登录模式,使用户信息和用户状态具有较好的一致性。且该模式无需改变(或较少改变)现有应用系统,具有较强的可操作性。

2 系统设计
2.1 统一门户与LIS的用户信息

数字化校园保存着全校用户的原始信息,图书馆LIS从数字化校园用户库获取并建立合法读者信息,而图书馆门户和其他系统则以LIS读者库为唯一验证源,并继承后者的信息。读者首次登录门户时,登录信息在门户系统和图书馆集成管理系统之间传送。登录模块将用户凭证发送给LIS进行验证,如果验证通过,系统就在本地用户表中建立用户信息,整个过程自动完成,用户无需注册,为实现统一认证和单点登录做好准备。此时,门户不但获取读者的各个基本属性值(一卡通号、密码、姓名、有效期等),同时还要验证读者的状态(正常、欠款、挂失、休学、出国、毕业等),以过滤无效用户。

2.2 统一其他应用系统的认证方式

数字图书馆门户集成了多个应用子系统,这些子系统以LIS读者库为验证源。根据不同的应用系统特点,认证方式主要有如下4种:

(1)本身基于LIS读者库。以ALEPH500系统为例,OPAC和MetaLib整合检索本身是LIS的组成部分,其验证源就是LIS读者库,门户通过HTTP页面代理方式传送用户凭证。

(2)本身具有读者库,但读者信息全部来自门户,如以Discuz!搭建的读者论坛。事先需要在Discuz!中开发部署Web Service组件,预置用户注册、登录、激活在线等操作。门户利用XML等标准数据格式访问Web Service组件,实现跨平台的互操作。

(3)本身具有读者库,但读者信息来自LIS中符合条件的用户。如万方公司基于Java的学位论文系统,事先须建立Java环境与Oracle数据库的连接,并在登录模块中配置连接代码,从而实现验证或获取用户信息的功能。

(4)本身不具备用户信息,只将用户凭证转发给LIS读者库进行验证。典型的应用系统有EZproxy校外访问系统和用Gene6或Serv-U搭建的FTP资源系统,二者无需自身建立读者信息,支持多种验证方式。本实践中,通过安装Oracle客户端和配置ODBC方法实现了EZproxy和FTP的统一认证。

2.3 建立DNN门户统一认证中心

数字图书馆门户是实现与其他应用系统整合的基础,也是该模式的统一认证中心。作为门户与读者直接交互的统一认证模块,它实现了图书馆门户与OPAC、整合检索、学位论文、校外访问等系统用户凭证的一致性。

读者登录门户后,若访问其他应用系统,登录模块会即时把用户凭证发送至相应系统中,继而能够通过其他应用系统的验证。这些验证最终都是基于图书馆读者库,这保证了密码的一致性,简化和规范了其他应用系统对用户的处理。此时,图书馆门户在LIS和其他应用系统之间起到了媒介作用,如图1所示:

图1 图书馆门户统一认证模式

可以看出,读者信息在数字化校园、LIS、门户和应用系统之间实现了统一。在统一认证过程中,登录模块会用Session和Cookie[ 5]来控制会话。在DNN系统中,可以赋值timeout来控制会话失效时间,以及设定Cookie的失效时间或失效事件。在会话生命周期内,用户可直接访问任一个应用系统而无需重复登录。管理员可以根据服务器和带宽压力情况在避免用户重复登录和有效利用系统资源之间做出平衡。

2.4 实现单点登录

单点登录是一种系统的用户管理机制。它通过单一的用户认证和授权行为,允许用户存取被授权的所有计算机和系统,而不需要多次提供密码[ 6]。图书馆应用单点登录,极大地方便了读者对各个系统的访问。单点登录技术在Web应用中的实现策略主要有Ticket凭证、Web请求代理以及凭证库的认证策略等[ 7]

基于DNN的图书馆门户系统登录模块,采用凭证库的认证策略,实现对所有应用系统的单点登录。基于凭证库的认证策略适合于采用标准认证机制的Web应用,负责将SSO用户映射成在相关应用上的合法身份,并将认证信息构造成一个用户凭证,这个用户凭证自动为用户完成在应用上的认证[ 8]。用户首先要通过门户主验证,若要进入其他应用系统,信息平台只需将当前的用户身份凭证交给相应系统进行从验证即可,这充分利用了各系统自身的特点,并且对用户的鉴权和授权进行分离,降低了系统之间的耦合性,具有很强的兼容性。

3 作为统一认证中心的DNN门户认证机制
3.1 门户角色设置

用户、角色和权限是各种信息管理系统的基本要素。依靠这些基本要素,用户登录时,定制开发的登录模块在后台能够完成一系列的动作,门户网站能够实现个性化的读者服务。角色是指用户拥有的身份和相应的权限。除了DNN本身具有的角色外,需要根据图书馆读者库的读者类型设置相应的门户角色,如教师、职工、馆内人员、硕士研究生、本科生等,并给出对应的描述信息,如读者所在院系和年级、班级,以及相应的借阅权限等,同时赋予其相应的访问权限,这就保证了读者个性化信息提示、个性链接以及对特定对象或页面的访问控制等功能的实现,如图2所示:

图2 图书馆门户用户角色设置

3.2 用户登录验证

用户登录时,门户的首要任务是验证用户凭证的合法性。用户验证是用户的个性信息通过验证体系识别并获得验证体系认可的一种机制,包括验证源和验证返回[ 9]。读者登录图书馆门户时,用户验证有两种情形,当门户存在该用户时,优先进行门户本地验证,否则需要进行图书馆集成管理系统读者库的验证。

3.3 获取用户信息

用户首次登录门户时,需要从LIS读者库进行验证。用户通过验证后,门户会从图书馆读者库中获取用户的信息,如用户名、密码、姓名、院系、读者类型等,并存储在门户相应的表字段中,从而完成用户的首次验证和注册。用户的身份类型存放在用户角色(UserRoles)表中,用户院系等信息存放在用户简介(UserProfile)表中,可根据实际情况设置需要的字段。基本过程如下:读者利用一卡通号登录门户,门户登录模块先在网站读者库里查询是否有该用户,如果有且密码正确,则门户验证成功。如果用户库中没有该用户或密码不正确,登录模块则把请求发送至图书馆读者库中进行用户验证,将返回结果即用户信息写入本地用户库。门户优先验证的方法也缩短了读者登录验证的时间,如图3所示:

图3 用户登录机制

3.4 处理用户身份

根据角色定义,当不同身份的用户登录图书馆门户时,系统对其赋予的操作权限也不同。匿名用户访问的是通用的门户页面,图书馆员除了按照普通读者的角色处理外,系统还可以赋予内容管理等权限。如果是超级管理员,则拥有最高的系统权限。实际上,用户用浏览器打开网页时,不管其是否登录,DNN都会有一个判断访问者身份并授予相应权限的过程。用户未登录就会被系统默认为匿名登录,这由页面的访问权限属性决定,该过程在瞬间完成。

3.5 用户登录结果

用户登录门户时,系统会根据用户身份按照预先设置好的角色为读者呈现个性化的欢迎语和链接。欢迎语调用了用户信息和预先设置好的角色描述信息,使读者有一种亲切感。相关链接则是指向了其他各个应用系统,读者从这里进入其他应用系统,会与其接口产生交互,并自动激活该系统的在线状态。同时,还可通过增加条件进一步判断读者身份,设置个性化的链接。如在用户登录时,硕士研究生就会多出一个“论文提交”的链接,如图4所示:

图4 读者登录后的界面

4 功能实现

实现统一认证系统功能的核心工作是开发登录模块Login组件,以实现用户信息的统一和认证方式的统一。限于篇幅,本文只讨论用户信息的统一,主要包括建立数据库层面的连接、编写前台代码和后台代码等。

4.1 DotNetNuke简介

DNN是基于Microsoft.NET技术的免费、开源、可扩展的内容管理系统,几乎可以构建任何类型的Web网站或应用。DNN采用VB.NET语言开发,通过皮肤、模块、数据提供者、语言包和模板实现扩展和定制[ 10]。据DNN官方网站描述,DNN是一个基于Microsoft.NET的网页内容管理系统和应用发展框架[ 11]。国内外都有许多DNN爱好者组成的论坛或博客。国内的一些图书情报等机构已经开始采用DNN进行网站建设和业务开发,如中国科学技术信息研究所、北京电子科技学院图书馆、杭州师范学院科研处、天津科技情报所、湖北省科技情报所等,DNN凭借独特的优势,在图书馆门户建设方面展现出广阔的应用前景。

4.2 建立Oracle读者视图

图书馆LIS系统需提供访问接口,门户登录模块才能与其对接。前者所用数据库通常为SQL Server或MySQL,如DNN和Drupal;而后者大多采用Oracle数据库,如国内的汇文系统、国外的ALEPH500系统。通常情况下,LIS的读者信息分散在多个表中。以Oracle数据库为例,为便于连接数据库以及考虑到访问的安全性,宜在数据库中专门建立一个只读属性的读者信息视图,并赋予该视图单独的访问用户和口令。该视图从若干表中获取门户所需的不同字段,为验证和继承信息做好准备。

4.3 建立Oracle连接环境

门户使用Oracle调用接口(Oracle Call Interface,OCI)对Oracle数据库视图进行操作。SQL Server与Oracle的连接需要使用Oracle数据访问组件(Oracle Data Access Components,ODAC)。ODAC是Oracle公司为Windows提供的用来访问Oracle数据库的一套组件,通过安装这些组件,能够对Oracle数据库进行存取操作。在使用Visual Studio2010开发Login模块前,必须确保安装了ODAC且能正常连接Oracle数据库。

ODAC目前的最新版本是11.1.7.20,支持Oracle9.2、10.1、10.2、11.1 以及 11.2 版本的连接。根据不同的需求,ODAC有不同的用途版本,其中“带有 Xcopy 部署的 ODAC 11.1.7.20”具有最小的 ODAC 安装大小并且提供对安装过程的细粒度控制[ 12],其安装有以下几个步骤:

(1)在命令行中进入解压后的安装目录,如c:\ODACXcopy。

(2)输入install.bat all c:\oracle odac,当屏幕重新出现提示符,表示安装成功。

(3)在系统环境变量中添加以下两个路径:

C:\ oracle;

C:\ oracle\bin;

4.4 开发登录模块代码

(1) 模板代码

用户登录结果由登录模板文件login.wf前台代码控制呈现,其部分代码如下:

……

欢迎

#if({user.Profile.GetPropertyValue("bumen")})

${user.Profile.GetPropertyValue("bumen")}<! —院系、年级 -- >

#end< span style="color:green;font-weight:bold;" >

${user.DisplayName}<! —姓名 -- >

登录!

&nbsp;< a href="{logoutUrl}" >< span style="font-weight:bold" >

退出

< a href="http://lib.bisu.edu.cn/tabid/756/Default.aspx" >

${Role.Description}<! —角色描述 -- >

#if({$Role.RoleName}=="24硕士研究生")

< a style="color: 333333" onclick="jingXW()" target="blank" >论文提交

<! —判断是否是研究生,如果是则显示“论文提交”字样,点击直接进入硕士论文系统 -- >

#end

< span style="cursor:hand;color: 0066cc" onclick="jingOPAC()" >借阅信息

……

(2)后台代码

图书馆门户的读者库与LIS读者库的交互是通过登录模块文件login.ascx.cs的后台代码实现的,其中包含着用户登录要完成的各种动作,其部分关键代码如下:

……

UserInfo userinfo = new UserInfo();

try{

string connstr = "Data Source=211.71.202.61/aleph18;User Id=patronname;Password=patronpd";

OracleConnection conn = new OracleConnection(connstr);

conn.Open();

strPassword = strPassword.ToUpper();

Oracle.DataAccess.Client.OracleCommand test =

new OracleCommand(

"select * from patron where (TRIM(PATRON_BARCODE) = ′" + strUsername + "′and PATRON_PASSWORD =′" + strPassword + "′) or (TRIM(PATRON_ID)=′" + strUsername + "′and PATRON_PASSWORD =′" + strPassword + "′) ", conn);//and PATRON_PASSWORD =′" + strPassword + "′

OracleDataReader reader = test.ExecuteReader();

while (reader.Read()) {

strUsername = reader["PATRON_BARCODE"].ToString();

userinfo.Username = strUsername.Trim();

userinfo.DisplayName = reader["PATRON_NAME"].ToString();

displayname = reader["PATRON_NAME"].ToString();

bumen = reader["PATRON_ADDRESS"].ToString();

userinfo.Membership.Password = reader["PATRON_PASSWORD"].ToString();

userinfo.Email = "";

userinfo.PortalID = 0;

userinfo.IsSuperUser = false;

userinfo.UserType = "1";

datetime = reader["PATRON_EXPIRY_DATE"].ToString();

lexing = reader["PATRON_STAUTS"].ToString();

}

conn.Close();

DateTime xxdate =

Convert.ToDateTime(datetime.Substring(0, 4) + "/" + datetime.Substring(4, 2) + "/" +

datetime.Substring(6, 2));

string[] userrolse;

……

该段代码完成的任务是从Oracle视图中验证用户凭证,并将相关字段值写入对应的SQL Server表中,完成一个新用户的验证和注册。考虑到有的读者还在使用旧的借阅证号码,验证设置了两个用户名条件,即一卡通号“PATRON_BARCODE”和旧借阅证号“PATRON_ID”,只要满足其中一个条件即可登录,保证了新旧系统的兼容性,同时用trim()函数去掉空格,减少了问题的产生。

5 统一认证实例
5.1 集成OPAC

图书馆的OPAC(书刊目录检索系统)是图书馆LIS系统的重要组成部分,也是为读者提供的最重要的网络服务之一。图书馆门户登录的首要任务就是进入OPAC。读者在门户登录后,点击借阅信息,即可进入OPAC并处于登录状态,从而查看并修改“我的基本信息”、“我的流通”、“我的荐购”,以及修改口令、进行续借和预约操作等。OPAC认证由login.wf中的onclick事件“jingOPAC()”完成,采用基于HTTP的页面代理登录方式,其代码置于控制全局功能的dnn.js文件中,部分关键代码如下:

function jingOPAC()

{

var ServerID = dnn.getVar(′ServerID′);

var temp1=(ServerID+′usernameErLib′).value;

var temp2=(ServerID+′passwordErLib′).value;

var f= document.createElement("< form name=′Outline′ target=′_blank′ action=\"http://211.71.202.61:8991/F/-?func=file&file_name=login-session\" method=post >");

……

}

5.2 集成学位论文系统

学位论文系统用来管理硕士或博士提交的论文信息及全文资料。硕士或博士是图书馆的两类特殊读者。学位论文系统无论采用什么平台,其用户都应该基于图书馆读者库。因此,在门户系统中,有必要纳入学位论文系统,统一认证用户信息,免去注册环节,避免重复登录,尽可能地为读者带来便利。本馆学位论文系统采用Java平台,登录模块已事先成功连接图书馆集成管理系统读者视图,并设置好读取与写入语句用来验证和获取用户信息(代码略)。用户登录门户后,点击“学位论文”链接,门户同样采用基于HTTP的页面代理登录方式使其处于登录状态。

6 结 语

本文阐述了以基于DNN的数字图书馆门户为核心的统一认证体系的设计与实现。DNN是功能强大而又灵活的内容管理系统,其基于数据库访问的统一认证实现方式具有开放性、灵活性等特点,兼容各种类型的异构平台,能任意扩展。经过一年多的测试运行,实际效果良好,是一种比较理想的统一认证解决方案。

The authors have declared that no competing interests exist.

作者已声明无竞争性利益关系。

参考文献
[1] 秦怡, 马自卫. 基于CAS模式的统一认证与门户管理的研究与实现[J]. 现代图书情报技术, 2008(12): 1-7. [本文引用:2]
[2] 蔡永州, 吴敏. 基于JA-SIG CAS统一认证平台的设计和实现[J]. 现代远程教育研究, 2010(1): 68-72. [本文引用:1]
[3] 王钰淞. 基于SSH框架的统一认证平台研究与实现[J]. 科技资讯, 2010(10): 4-5. [本文引用:1]
[4] 张敏. 单点登录与统一认证解决方案[J]. 信息安全与技术, 2011(1): 66-67. [本文引用:1]
[5] 刘峰, 王峥, 曹华平, . 基于CAS的门户单点登录方案[J]. 计算机系统应用, 2011, 20(6): 77-80. [本文引用:1]
[6] 江淇, 王群. 单点登录技术及其在图书馆中的应用[J]. 图书馆理论与实践, 2007(4): 106-108. [本文引用:1]
[7] 齐惠颖, 徐树维. 单点登录技术在图书馆门户系统中的研究和实现[J]. 现代图书馆情报技术, 2008(10): 75-80. [本文引用:1]
[8] Gilmore B, Farvis K, Maddock J. Core Middleware and Shared Services Studies Single Sign - On Report[R/OL]. [2011-01-11]. http://www.jisc.ac.uk/publications/reports/2004/singlesignonreport.aspx. [本文引用:1]
[9] 刘举平, 胡瑛. 基于LIS的用户统一认证分析应用[J]. 现代情报, 2008(9): 157-161. [本文引用:1]
[10] DotNetNuke[DB/OL]. [2011-01-28]. http://en.wikipedia.org/wiki/DotNetNuke. [本文引用:1]
[11] DotNetNuke[DB/OL]. [2011-01-28]. http://www.DotNetNuke.com. [本文引用:1]
[12] Oracle 数据访问组件(ODAC) 下载[DB/OL]. [2011-03-15]. http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html. [本文引用:1]