劉 輝,黃偉亮
(河南機電職業(yè)學院 信息工程系,鄭州 451191)
單點登錄是目前比較流行的對多種系統(tǒng)業(yè)務進行集成與整合的解決方案之一。所謂單點登錄(Single Sign On,簡寫為SSO),即用戶只需在登錄時提供一次用戶認證信息,通過認證以后,無需再重復登錄便可訪問其他各子系統(tǒng)應用。IBM對SSO有一個形象的解釋,即“單點登錄、全網(wǎng)漫游”[1]。對現(xiàn)有的單點登錄實現(xiàn)案例及文獻[2-4]綜合分析顯示,對已有系統(tǒng)進行單點登錄改造、整合,或基于SSO重新規(guī)劃設計所有的網(wǎng)絡應用,既耗時又耗力,需要付出巨大的代價。雖然市場上已出現(xiàn)了多種專門的SSO商業(yè)軟件,但價格以及對已有的網(wǎng)絡應用支持是否完善等問題,往往使用戶望而卻步。本文嘗試以開源軟件為基礎,構建一個簡易的單點登錄系統(tǒng),來解決局域網(wǎng)中多個應用系統(tǒng)的用戶統(tǒng)一身份認證和集中管理問題。
目前,實現(xiàn)單點登錄的開源軟件主要有OpenSSO、JOSSO、CAS等幾種。其中OpenSSO是由Sun公司支持的一個開源的SSO項目,但自從Sun被甲骨文(Oracle)收購,該項目已被關閉并凍結下一步開發(fā)[5];JOSSO(Java Open Single Sign-On)也是一個開源的J2EE-based的SSO(單點登錄)基礎結構,它具有跨平臺性,允許整合Java和非Java應用程序[6];CAS(Central Authentication Server)是Yale(耶魯)大學發(fā)起的一個開源項目,旨在為Web應用系統(tǒng)提供一種可靠的單點登錄方案,它提供了一個企業(yè)級單點登錄解決方案,通過獨立部署CAS Server及在客戶端比如 Java、.Net、PHP、Perl、Apache、uPortal、Ruby 等 Web 應 用 中 加入 CAS Client的方式實現(xiàn)統(tǒng)一認證[7]。CAS實現(xiàn)單點登錄的機制見圖1。
圖1 CAS實現(xiàn)單點登錄的機制
當用戶通過客戶端的Web瀏覽器訪問受保護資源時,嵌入客戶端的CAS Client將截取并分析該http請求中是否包含合法的Service Ticket,如果有,則說明當前用戶已經(jīng)登錄,允許訪問資源;否則,將該http請求重定向到CAS Server登錄地址,強制對用戶進行認證。在這個過程中,CAS Server主要負責對用戶的認證工作。由于CAS具有設計理念先進、體系結構合理、配置簡單、客戶端支持廣泛、技術成熟等優(yōu)點,本文選用該軟件構建單點登錄系統(tǒng)。
CAS協(xié)議僅僅為基于Web的應用提供了用戶信息的認證服務,在實際應用中,CAS Server的認證接口會處理登錄用戶的憑證(Credentidals)信息,最常見的是用戶名/密碼,CAS Server可能需要到數(shù)據(jù)庫檢索一條用戶帳號信息,也可能在XML文件中檢索用戶名/密碼,還可能通過 LDAP Server獲取等。出于簡單、易于再開發(fā)考慮,本文選用的是開源數(shù)據(jù)庫Mysql來集中保存用戶信息,并對用戶信息進行統(tǒng)一管理。
根據(jù)上述分析,該系統(tǒng)主要由三部分組成:統(tǒng)一用戶管理、CAS統(tǒng)一認證服務、各種Web應用(根據(jù)需要可集成多個系統(tǒng))。系統(tǒng)總體結構如圖2所示。
圖2 系統(tǒng)總體結構
統(tǒng)一用戶管理作為該系統(tǒng)獨立的一個應用模塊,主要負責用戶的添加、刪除、更新等管理。
統(tǒng)一認證即當用戶第一次訪問不同的Web應用資源時,將被重定向到CAS統(tǒng)一認證服務器,根據(jù)數(shù)據(jù)庫中用戶與角色的信息憑證,對其進行檢驗,如果認證通過,則轉向相應的Web應用資源。
根據(jù)上述分析,本文將基于J2EE構建該單點登錄系統(tǒng),采用Tomcat作為Web服務器,結合CAS Server配置統(tǒng)一認證服務,使用數(shù)據(jù)庫Mysql來存儲用戶與角色信息,并進行相應的應用程序開發(fā),以實現(xiàn)用戶添加、刪除、更新等管理,至于其他的客戶端Web應用,可根據(jù)需要自行選擇不同的系統(tǒng)結合CAS Client進行配置。
首先,根據(jù)服務器配置,正確安裝JRE、Tomcat與 Mysql,本 文 使 用 的 是 JRE1.6.0_10+Tomcat 6.0.36+Mysql5.6,然后輸入部分用戶信息到數(shù)據(jù)庫中,以用于測試。
另外,CAS需要SSL(安全套接層協(xié)議)才能正常工作。SSL提供了一種在應用服務器(如Web、Telenet、FTP等)和客戶端之間提供數(shù)據(jù)安全性分層的機制,它為TCP/IP連接提供數(shù)據(jù)加密、服務器認證、消息完整性以及可選的客戶機認證。通過在Web服務器端配置專業(yè)的CA機構頒發(fā)的證書,實現(xiàn)SSL通信。作為一個局部的應用系統(tǒng),本文采用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"/> 統(tǒng)一認證服務的配置相對簡單,只需將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應用可以正常啟動。之后,根據(jù)應用需要,可對用戶登錄界面進行簡單修改,其界面的相應設計文件保存在目錄cas/webapp/WEB-INF/view/jsp/default/u及/cas/webapp/css中。 在Mysql數(shù)據(jù)庫中建立一個用戶(User)表,用于存放用戶的登錄信息。表結構如表1所示,包括用戶編號、登錄名稱、登錄密碼、用戶名稱、用戶描述等。 表1 用戶(User)表結構 然后,通過以下步驟配置CAS,應用Mysql數(shù)據(jù)庫進行用戶的身份驗證。 第一步:復制以下兩個文件到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)增加數(shù)據(jù)源 (2)改變認證方式 將 對各種Web應用進行統(tǒng)一認證,是通過將CAS Client加入到客戶端模塊實現(xiàn)的。下面以基于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文件復制到所發(fā)布Web應用的WEB-INF/lib下。然后,在客戶端Web應用中修改WEB-INF/web.xml文件,在其中添加應用過濾器,示例如下: 在多種Web應用客戶端進行上述類似配置后,當用戶通過瀏覽器第一次訪問CAS保護的Web應用時,該http請求就將會被重定向到CAS統(tǒng)一認證服務器(即 https://localhost:8443/cas),要求輸入用戶名與密碼進行認證,從而實現(xiàn)了簡單的單點登錄與認證。 本文基于開源軟件所實現(xiàn)的簡易單點登錄系統(tǒng),完成了用戶的集中管理與統(tǒng)一的身份認證,使得用戶輸入一次用戶名和密碼便可訪問多個Web應用,從而提高了用戶使用系統(tǒng)的效率,改善了用戶體驗。但是,單點登錄(SSO)的部署本身就是一把雙刃劍,如果配置不合理反而會使系統(tǒng)的安全性降低。本文所提出的這個系統(tǒng),在實際應用中還有待于進一步改進,以提高系統(tǒng)的整體安全性。 [1]肖菁.WebSphere環(huán)境下的SSO實現(xiàn)之——SSO實現(xiàn)技術準備[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ù)的單點登錄協(xié)議設計與實現(xiàn)[J].計算機工程與科學,2012(2). [3]鄭偉,王加陽.異構應用的單點登錄方法[J].軟件導刊,2010(7). [4]金永勤.在應用整合中單點登錄解決方案的研究[J].計算機與現(xiàn)代化,2007(7). [5]開源中國社區(qū).opensso-單點登錄框架[EB/OL].(2008-09-24)[2013-05-26].http://www.oschina.net/p/opensso. [6]開源中國社區(qū).JOSSO-單點登錄框架 -開源中國OSChina.NET[EB/OL].(2008-09-24)[2013-05-26].http://www.oschina.net/p/josso/simila-r_projects. [7]張濤,王秉坤.使用CAS在Tomcat中實現(xiàn)單點登錄[EB/OL].(2008-04-10)[2013-05-26].http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/.3.2 CAS Server應用配置
3.3 M ysql數(shù)據(jù)庫的鏈接與配置
3.4 CAS Client客戶端配置
4 小結