陳國慧,譚海波,呂 波,李曉風
(1.中國科學院 合肥物質科學研究院,安徽 合肥 230031;2.中國科學技術大學,安徽 合肥 230026)
隨著計算機技術、網絡技術的飛速發展,用戶可使用的信息化應用,諸如辦公應用、郵件服務、財務管理、設備管理等系統的數量日益增多。然而這些系統大多都是獨立設計開發,相互之間缺乏信息共享、業務互動以及文件共享等方面的設計,在時代的背景下,逐漸成為信息孤島[1]。由于各應用系統的分散管理,導致它們的使用和維護產生諸多問題:開發人員需要維護多個異構的應用系統,所使用的架構、技術可能不同,使維護工作變得困難;管理人員需要維護各應用系統中的用戶、組織和角色等信息,多個系統很容易產生信息冗余和沖突;用戶使用各自孤立的應用系統需要使用不同賬號和密碼,系統數量越多,越是增加用戶賬號管理成本和系統使用成本。而當前各行業、各領域工作協同已成趨勢化,這些問題亟待解決,因此構建統一的身份認證系統,提供集中的信息管理和應用集成已成當務之急[2]。
為解決上述問題,設計并實現了一種基于CAS[3]單點登錄[4]和Liferay[5]門戶[6]的統一身份認證系統[7],提供統一身份認證庫、統一的用戶界面和應用資源集成平臺。
通過需求分析,系統不僅要提供對用戶、組織和權限的管理,并且由于院、所、中心、實驗室等研究機構之間經常性的跨組織、跨學科交流,需要實現和提供一個靈活方便的人員、課題組、權限以及內容的管理和使用平臺。
經過調查研究和比對的結果,該系統選擇關系數據庫MySQL管理系統數據。統一身份認證系統通常采用LDAP作為用戶身份信息存儲方式,主要利用其查詢數據速度快和樹狀層次結構存儲的優點[7]。但是在LDAP中增加、刪除和修改數據存在速度過慢的問題,不能滿足系統對數據修改效率的要求。而且LDAP并不支持事務機制,在該系統架構下,可能會出現數據不一致的問題。MySQL數據庫對數據增加、刪除和修改則沒有速度過慢的問題,且其支持事務機制可以解決數據不一致的問題,滿足系統對數據管理的性能和安全方面的需求[8]。
該系統使用中央認證服務(central authentication service,CAS)作為單點登錄實現的技術。單點登錄(single sign-on,SSO)是服務于企業業務整合的解決方案,在多應用系統中,用戶只需一次登錄就可以訪問所有相互信任的應用系統[9]。單點登錄的實現技術有多種,由于商用產品成本過高,基于項目成本和功能需求,主要考慮開源產品,目前主流技術有Kerberos[10]和CAS等[11]。Kerberos技術的安全性較高,但每一個子應用都需要實現Kerberos體系,其實現比較復雜,部署和使用成本過高。CAS系統由于其簡單有效、安全可靠、文檔齊全的特性,使其部署簡單,并且有良好的社區支持,在實際中應用廣泛[3]。經過比對,該系統選擇CAS技術作為單點登錄模塊。
門戶也被稱為信息門戶,是一個提供統一用戶界面和集成應用資源的系統,提供統一信息管理和集中的應用入口,通常以網頁的形式展現[6]。門戶最主要的兩大功能是應用的集成和內容的展現,提供訪問不同來源內容的能力和統一的信息管理平臺,通常還包括單點登錄、權限控制、內容管理、信息發布、文件管理等功能[12]。
該系統使用Liferay搭建門戶系統。Liferay是開源的門戶項目,利用Spring、Hibernate、Struts等框架[13],實現了JSR168規范[14]中提出的門戶標準。Liferay支持對用戶、組織、角色、站點、權限等的管理,還支持公告、文章、文檔、圖片等內容的發布、展示和管理,允許用戶個性化定制個人空間等功能,是一個通用的、統一的工作平臺。同時,以Liferay作為開發平臺,由于其良好的可擴展性和定制性,可極大提高開發人員的開發效率和管理質量。
該系統主要由數據庫系統、CAS單點登錄系統和Liferay門戶三個部分構成,系統架構如圖1所示。

圖1 統一身份認證系統架構
數據庫系統存儲統一身份認證基礎庫,主要包括用戶、組織、角色信息等數據,是整個系統的基礎數據源,為統一身份認證提供數據支持。CAS單點登錄系統,提供單點登錄服務,主要由CAS Server和CAS Client兩個部分組成。CAS Server作為認證中心,負責對用戶的認證工作,對用戶名和密碼憑證進行驗證處理;CAS Client被集成于應用系統中,負責將對用戶身份認證的工作重定向到CAS Server進行處理。Liferay門戶提供統一的用戶界面和內容展示,包括對用戶、組織、角色以及站點等信息的管理,其本身集成了CAS Client包服務,也可作為普通應用系統使用統一身份認證功能。
該系統使用MySQL數據庫作為數據庫管理系統。根據需求,系統主要數據表包括用戶、組織、角色、用戶組和資源動作表等,關系如圖2所示。

圖2 主要數據表關系
用戶表user_是系統的關鍵實體,統一身份認證的信息來源;組織表organization_是組織架構表,存儲人員的組織架構關系;用戶組usergroup存儲用戶組信息,可用于靈活管理流動人員和對人員進行分組;角色表role_存儲的是角色的定義,系統基于角色提供權限,角色被賦予用戶或用戶組,使其具有特定的權限,角色主要分為管理員、用戶、臨時用戶等;資源動作表resourceaction存儲角色的權限,及對用戶訪問門戶中資源的增加、刪除、修改和查詢的能力。
3.2.1 CAS單點登錄流程
實現單點登錄功能需要解決三個關鍵問題:登錄信息傳遞問題、登錄狀態判斷問題和登出信息的傳遞問題。
CAS通過Ticket(票據)和對Ticket的交互處理,解決用戶登錄狀態問題。主要票據有全局票據(ticket granting ticket,TGT)和服務票據(service ticket,ST)等。TGT是認證中心CAS Server為用戶簽發的登錄票據,用戶擁有了TGT,就可以證明自己已經在認證中心登錄成功,即完成全局登錄;全局會話(ticket granting cookie,TGC)是TGT對象的ID,被作為瀏覽器與CAS Server之間的會話(Cookie)[15]返回給用戶,用作瀏覽器和CAS Server間通訊的訪問憑證,且其只能通過安全通道傳輸(HTTPS)[16];ST是CAS為用戶簽發的訪問某一特定應用的票據。
用戶首次訪問某應用時,如系統A,從發出訪問請求到獲得資源流程如圖3所示。
具體流程說明如下:
(1)用戶使用瀏覽器請求訪問系統A中受限資源,系統A檢查發現用戶沒有經過認證,需要對用戶身份進行認證;
(2)系統A將請求重定向到認證中心;
(3)瀏覽器向認證中心發送登錄請求;
(4)認證中心返回登錄頁面;
(5)用戶輸入用戶名和密碼后提交至認證中心;
(6)認證中心從統一認證庫中獲取用戶信息;
(7)統一認證庫返回用戶信息給認證中心,認證中心驗證成功后,創建TGT,并簽發ST;
(8)認證中心將TGT的ID,即TGC作為Cookie,返回給用戶瀏覽器,并重定向至系統A,重定向鏈接中將ST設置為參數返回給系統A;
(9)瀏覽器被重定向至系統A,此時請求攜帶參數ST;
(10)系統A判斷請求存在ST票據,直接向認證中心發出驗證ST請求;
(11)認證中心檢查該ST是否存在,若存在,則證明用戶身份已經獲得認證,返回驗證結果;
(12)系統A收到驗證結果,創建局部會話的Cookie,返回給用戶;
(13)用戶再次請求訪問系統A的受限資源,攜帶Cookie,系統A檢查到會話已經存在該Cookie,驗證通過;
(14)將請求的資源返回給用戶。
經過上述一系列流程后,系統完成對用戶的初次認證,并最終將用戶請求的資源返回給用戶。整個過程完成了瀏覽器、應用系統和認證中心三者之間的兩兩互連,從而解決登錄信息的傳遞問題。三者之間的關系為:瀏覽器與認證中心通過TGC維持全局會話;應用系統通過ST與認證中心保持聯系,驗證用戶的身份;瀏覽器與應用系統則通過普通Cookie維持局部會話。
用戶首次訪問未登錄的系統B時,與訪問系統A時的區別在于第3步登錄請求時,該請求直接攜帶TGC信息,認證中心會直接簽發新的ST,而不必再經過過程4~7,直接省去了用戶輸入用戶名和密碼登錄的過程。
用戶登出應用系統時,除銷毀該應用的局部會話外,還通知認證中心結束全局會話,認證中心再通知其他應用系統銷毀各自局部會話,實現其他應用系統的自動登出。
3.2.2 CAS Server的部署和配置
(1)部署環境配置。
該系統選擇將CAS Server部署到Tomcat[17]服務器。為增強系統安全性和啟用CAS Server的單點登錄功能,需要對CAS Server的安全證書進行管理。該過程使用Java自帶的證書管理工具keytool生成證書并導入到CAS Server的執行環境中,在Tomcat配置文件server.xml中添加對HTTPS連接支持的配置,關鍵配置如下:
protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443"SSLEnabled="true" scheme="https" secure="true" lientAuth="false" sslProtocol="TLS" keystoreFile=" pathname" keystorePass="pass" maxThreads="150" >
(2)CAS Server依賴包配置。
CAS Server使用Maven[18]進行項目管理。項目默認沒有提供MySQL數據庫的連接和認證的依賴包,部署時需要添加相關依賴包的配置,配置位于CAS Server項目的pom.xml文件中。
(3)CAS Server數據庫、密碼規則配置。
CAS支持對數據庫的連接和使用數據庫作為認證數據源,有多種密碼驗證規則可供選擇。對CAS Server的數據庫連接、獲取認證數據和密碼驗證規則設置在配置文件application.properties中,添加的配置如圖4所示。

圖4 CAS中數據庫和密碼驗證規則配置
3.2.3 CAS Client的使用
CAS Client以包或庫的形式被集成到待認證的應用系統,保護應用系統中訪問受限的資源。應用系統不必在應用內對用戶身份進行認證,而是將認證工作重定向到CAS Server進行處理。CAS Client能夠支持多種編程語言開發的應用系統,包括Java,.Net,PHP,Perl等。
CAS Client與Web應用整合時只需關注兩個方面,分別是請求路徑是否需要跳轉到登錄頁面和重定向用戶到請求的資源。認證工作可通過設置過濾器(Filter)[19]配置完成,將配置中的過濾器和監聽器配置成的站點和重定向目標配置成CAS Server對應的接口。
(1)Liferay的部署配置。
為避免數據的冗余,該系統中Liferay與CAS使用同一份用戶信息。Liferay使用數據庫數據需要與MySQL進行對接,并使密碼驗證規則相互匹配。需要在Liferay的啟動配置文件portal-setup-wizard.properties中添加相關配置,如圖5所示。
(2)Liferay對接CAS設置。
為使Liferay啟用CAS單點登錄功能,需要在其系統設置中與CAS進行對接。需要在認證的設置中配置CAS單點登錄的登錄URL、退出URL、服務器名和服務器URL等。
該系統提供普通用戶自定義門戶桌面內容的功能,用戶可進行個性化設置,發布公告、文章、文檔、圖片等。管理員可對用戶、組織和角色等信息進行管理。

圖5 數據庫和密碼驗證規則配置
基于CAS單點登錄和Liferay門戶,以關系數據庫為數據存儲基礎設計與實現了統一身份認證系統,達到整合用戶身份信息、集中應用系統入口和統一系統信息管理的目的。該系統為用戶間進行信息共享和交流提供了一個良好的平臺,并進一步提高了各系統間協同工作的能力,同時降低了用戶信息管理的難度和成本。在未來的工作中,將繼續深化對統一身份認證系統的開發、建設和推廣工作。不僅要將現有的應用系統納入到統一身份認證平臺中進行管理,而且要對新的應用系統進行推廣并對開發人員提供幫助,使統一身份認證系統得到更廣泛的支持和認可,削弱乃至消除信息孤島的存在。