陳國(guó)慧,譚海波,呂 波,李曉風(fēng)
(1.中國(guó)科學(xué)院 合肥物質(zhì)科學(xué)研究院,安徽 合肥 230031;2.中國(guó)科學(xué)技術(shù)大學(xué),安徽 合肥 230026)
隨著計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,用戶可使用的信息化應(yīng)用,諸如辦公應(yīng)用、郵件服務(wù)、財(cái)務(wù)管理、設(shè)備管理等系統(tǒng)的數(shù)量日益增多。然而這些系統(tǒng)大多都是獨(dú)立設(shè)計(jì)開發(fā),相互之間缺乏信息共享、業(yè)務(wù)互動(dòng)以及文件共享等方面的設(shè)計(jì),在時(shí)代的背景下,逐漸成為信息孤島[1]。由于各應(yīng)用系統(tǒng)的分散管理,導(dǎo)致它們的使用和維護(hù)產(chǎn)生諸多問題:開發(fā)人員需要維護(hù)多個(gè)異構(gòu)的應(yīng)用系統(tǒng),所使用的架構(gòu)、技術(shù)可能不同,使維護(hù)工作變得困難;管理人員需要維護(hù)各應(yīng)用系統(tǒng)中的用戶、組織和角色等信息,多個(gè)系統(tǒng)很容易產(chǎn)生信息冗余和沖突;用戶使用各自孤立的應(yīng)用系統(tǒng)需要使用不同賬號(hào)和密碼,系統(tǒng)數(shù)量越多,越是增加用戶賬號(hào)管理成本和系統(tǒng)使用成本。而當(dāng)前各行業(yè)、各領(lǐng)域工作協(xié)同已成趨勢(shì)化,這些問題亟待解決,因此構(gòu)建統(tǒng)一的身份認(rèn)證系統(tǒng),提供集中的信息管理和應(yīng)用集成已成當(dāng)務(wù)之急[2]。
為解決上述問題,設(shè)計(jì)并實(shí)現(xiàn)了一種基于CAS[3]單點(diǎn)登錄[4]和Liferay[5]門戶[6]的統(tǒng)一身份認(rèn)證系統(tǒng)[7],提供統(tǒng)一身份認(rèn)證庫(kù)、統(tǒng)一的用戶界面和應(yīng)用資源集成平臺(tái)。
通過需求分析,系統(tǒng)不僅要提供對(duì)用戶、組織和權(quán)限的管理,并且由于院、所、中心、實(shí)驗(yàn)室等研究機(jī)構(gòu)之間經(jīng)常性的跨組織、跨學(xué)科交流,需要實(shí)現(xiàn)和提供一個(gè)靈活方便的人員、課題組、權(quán)限以及內(nèi)容的管理和使用平臺(tái)。
經(jīng)過調(diào)查研究和比對(duì)的結(jié)果,該系統(tǒng)選擇關(guān)系數(shù)據(jù)庫(kù)MySQL管理系統(tǒng)數(shù)據(jù)。統(tǒng)一身份認(rèn)證系統(tǒng)通常采用LDAP作為用戶身份信息存儲(chǔ)方式,主要利用其查詢數(shù)據(jù)速度快和樹狀層次結(jié)構(gòu)存儲(chǔ)的優(yōu)點(diǎn)[7]。但是在LDAP中增加、刪除和修改數(shù)據(jù)存在速度過慢的問題,不能滿足系統(tǒng)對(duì)數(shù)據(jù)修改效率的要求。而且LDAP并不支持事務(wù)機(jī)制,在該系統(tǒng)架構(gòu)下,可能會(huì)出現(xiàn)數(shù)據(jù)不一致的問題。MySQL數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)增加、刪除和修改則沒有速度過慢的問題,且其支持事務(wù)機(jī)制可以解決數(shù)據(jù)不一致的問題,滿足系統(tǒng)對(duì)數(shù)據(jù)管理的性能和安全方面的需求[8]。
該系統(tǒng)使用中央認(rèn)證服務(wù)(central authentication service,CAS)作為單點(diǎn)登錄實(shí)現(xiàn)的技術(shù)。單點(diǎn)登錄(single sign-on,SSO)是服務(wù)于企業(yè)業(yè)務(wù)整合的解決方案,在多應(yīng)用系統(tǒng)中,用戶只需一次登錄就可以訪問所有相互信任的應(yīng)用系統(tǒng)[9]。單點(diǎn)登錄的實(shí)現(xiàn)技術(shù)有多種,由于商用產(chǎn)品成本過高,基于項(xiàng)目成本和功能需求,主要考慮開源產(chǎn)品,目前主流技術(shù)有Kerberos[10]和CAS等[11]。Kerberos技術(shù)的安全性較高,但每一個(gè)子應(yīng)用都需要實(shí)現(xiàn)Kerberos體系,其實(shí)現(xiàn)比較復(fù)雜,部署和使用成本過高。CAS系統(tǒng)由于其簡(jiǎn)單有效、安全可靠、文檔齊全的特性,使其部署簡(jiǎn)單,并且有良好的社區(qū)支持,在實(shí)際中應(yīng)用廣泛[3]。經(jīng)過比對(duì),該系統(tǒng)選擇CAS技術(shù)作為單點(diǎn)登錄模塊。
門戶也被稱為信息門戶,是一個(gè)提供統(tǒng)一用戶界面和集成應(yīng)用資源的系統(tǒng),提供統(tǒng)一信息管理和集中的應(yīng)用入口,通常以網(wǎng)頁的形式展現(xiàn)[6]。門戶最主要的兩大功能是應(yīng)用的集成和內(nèi)容的展現(xiàn),提供訪問不同來源內(nèi)容的能力和統(tǒng)一的信息管理平臺(tái),通常還包括單點(diǎn)登錄、權(quán)限控制、內(nèi)容管理、信息發(fā)布、文件管理等功能[12]。
該系統(tǒng)使用Liferay搭建門戶系統(tǒng)。Liferay是開源的門戶項(xiàng)目,利用Spring、Hibernate、Struts等框架[13],實(shí)現(xiàn)了JSR168規(guī)范[14]中提出的門戶標(biāo)準(zhǔn)。Liferay支持對(duì)用戶、組織、角色、站點(diǎn)、權(quán)限等的管理,還支持公告、文章、文檔、圖片等內(nèi)容的發(fā)布、展示和管理,允許用戶個(gè)性化定制個(gè)人空間等功能,是一個(gè)通用的、統(tǒng)一的工作平臺(tái)。同時(shí),以Liferay作為開發(fā)平臺(tái),由于其良好的可擴(kuò)展性和定制性,可極大提高開發(fā)人員的開發(fā)效率和管理質(zhì)量。
該系統(tǒng)主要由數(shù)據(jù)庫(kù)系統(tǒng)、CAS單點(diǎn)登錄系統(tǒng)和Liferay門戶三個(gè)部分構(gòu)成,系統(tǒng)架構(gòu)如圖1所示。
圖1 統(tǒng)一身份認(rèn)證系統(tǒng)架構(gòu)
數(shù)據(jù)庫(kù)系統(tǒng)存儲(chǔ)統(tǒng)一身份認(rèn)證基礎(chǔ)庫(kù),主要包括用戶、組織、角色信息等數(shù)據(jù),是整個(gè)系統(tǒng)的基礎(chǔ)數(shù)據(jù)源,為統(tǒng)一身份認(rèn)證提供數(shù)據(jù)支持。CAS單點(diǎn)登錄系統(tǒng),提供單點(diǎn)登錄服務(wù),主要由CAS Server和CAS Client兩個(gè)部分組成。CAS Server作為認(rèn)證中心,負(fù)責(zé)對(duì)用戶的認(rèn)證工作,對(duì)用戶名和密碼憑證進(jìn)行驗(yàn)證處理;CAS Client被集成于應(yīng)用系統(tǒng)中,負(fù)責(zé)將對(duì)用戶身份認(rèn)證的工作重定向到CAS Server進(jìn)行處理。Liferay門戶提供統(tǒng)一的用戶界面和內(nèi)容展示,包括對(duì)用戶、組織、角色以及站點(diǎn)等信息的管理,其本身集成了CAS Client包服務(wù),也可作為普通應(yīng)用系統(tǒng)使用統(tǒng)一身份認(rèn)證功能。
該系統(tǒng)使用MySQL數(shù)據(jù)庫(kù)作為數(shù)據(jù)庫(kù)管理系統(tǒng)。根據(jù)需求,系統(tǒng)主要數(shù)據(jù)表包括用戶、組織、角色、用戶組和資源動(dòng)作表等,關(guān)系如圖2所示。
圖2 主要數(shù)據(jù)表關(guān)系
用戶表user_是系統(tǒng)的關(guān)鍵實(shí)體,統(tǒng)一身份認(rèn)證的信息來源;組織表organization_是組織架構(gòu)表,存儲(chǔ)人員的組織架構(gòu)關(guān)系;用戶組usergroup存儲(chǔ)用戶組信息,可用于靈活管理流動(dòng)人員和對(duì)人員進(jìn)行分組;角色表role_存儲(chǔ)的是角色的定義,系統(tǒng)基于角色提供權(quán)限,角色被賦予用戶或用戶組,使其具有特定的權(quán)限,角色主要分為管理員、用戶、臨時(shí)用戶等;資源動(dòng)作表resourceaction存儲(chǔ)角色的權(quán)限,及對(duì)用戶訪問門戶中資源的增加、刪除、修改和查詢的能力。
3.2.1 CAS單點(diǎn)登錄流程
實(shí)現(xiàn)單點(diǎn)登錄功能需要解決三個(gè)關(guān)鍵問題:登錄信息傳遞問題、登錄狀態(tài)判斷問題和登出信息的傳遞問題。
CAS通過Ticket(票據(jù))和對(duì)Ticket的交互處理,解決用戶登錄狀態(tài)問題。主要票據(jù)有全局票據(jù)(ticket granting ticket,TGT)和服務(wù)票據(jù)(service ticket,ST)等。TGT是認(rèn)證中心CAS Server為用戶簽發(fā)的登錄票據(jù),用戶擁有了TGT,就可以證明自己已經(jīng)在認(rèn)證中心登錄成功,即完成全局登錄;全局會(huì)話(ticket granting cookie,TGC)是TGT對(duì)象的ID,被作為瀏覽器與CAS Server之間的會(huì)話(Cookie)[15]返回給用戶,用作瀏覽器和CAS Server間通訊的訪問憑證,且其只能通過安全通道傳輸(HTTPS)[16];ST是CAS為用戶簽發(fā)的訪問某一特定應(yīng)用的票據(jù)。
用戶首次訪問某應(yīng)用時(shí),如系統(tǒng)A,從發(fā)出訪問請(qǐng)求到獲得資源流程如圖3所示。
具體流程說明如下:
(1)用戶使用瀏覽器請(qǐng)求訪問系統(tǒng)A中受限資源,系統(tǒng)A檢查發(fā)現(xiàn)用戶沒有經(jīng)過認(rèn)證,需要對(duì)用戶身份進(jìn)行認(rèn)證;
(2)系統(tǒng)A將請(qǐng)求重定向到認(rèn)證中心;
(3)瀏覽器向認(rèn)證中心發(fā)送登錄請(qǐng)求;
(4)認(rèn)證中心返回登錄頁面;
(5)用戶輸入用戶名和密碼后提交至認(rèn)證中心;
(6)認(rèn)證中心從統(tǒng)一認(rèn)證庫(kù)中獲取用戶信息;
(7)統(tǒng)一認(rèn)證庫(kù)返回用戶信息給認(rèn)證中心,認(rèn)證中心驗(yàn)證成功后,創(chuàng)建TGT,并簽發(fā)ST;
(8)認(rèn)證中心將TGT的ID,即TGC作為Cookie,返回給用戶瀏覽器,并重定向至系統(tǒng)A,重定向鏈接中將ST設(shè)置為參數(shù)返回給系統(tǒng)A;
(9)瀏覽器被重定向至系統(tǒng)A,此時(shí)請(qǐng)求攜帶參數(shù)ST;
(10)系統(tǒng)A判斷請(qǐng)求存在ST票據(jù),直接向認(rèn)證中心發(fā)出驗(yàn)證ST請(qǐng)求;
(11)認(rèn)證中心檢查該ST是否存在,若存在,則證明用戶身份已經(jīng)獲得認(rèn)證,返回驗(yàn)證結(jié)果;
(12)系統(tǒng)A收到驗(yàn)證結(jié)果,創(chuàng)建局部會(huì)話的Cookie,返回給用戶;
(13)用戶再次請(qǐng)求訪問系統(tǒng)A的受限資源,攜帶Cookie,系統(tǒng)A檢查到會(huì)話已經(jīng)存在該Cookie,驗(yàn)證通過;
(14)將請(qǐng)求的資源返回給用戶。
經(jīng)過上述一系列流程后,系統(tǒng)完成對(duì)用戶的初次認(rèn)證,并最終將用戶請(qǐng)求的資源返回給用戶。整個(gè)過程完成了瀏覽器、應(yīng)用系統(tǒng)和認(rèn)證中心三者之間的兩兩互連,從而解決登錄信息的傳遞問題。三者之間的關(guān)系為:瀏覽器與認(rèn)證中心通過TGC維持全局會(huì)話;應(yīng)用系統(tǒng)通過ST與認(rèn)證中心保持聯(lián)系,驗(yàn)證用戶的身份;瀏覽器與應(yīng)用系統(tǒng)則通過普通Cookie維持局部會(huì)話。
用戶首次訪問未登錄的系統(tǒng)B時(shí),與訪問系統(tǒng)A時(shí)的區(qū)別在于第3步登錄請(qǐng)求時(shí),該請(qǐng)求直接攜帶TGC信息,認(rèn)證中心會(huì)直接簽發(fā)新的ST,而不必再經(jīng)過過程4~7,直接省去了用戶輸入用戶名和密碼登錄的過程。
用戶登出應(yīng)用系統(tǒng)時(shí),除銷毀該應(yīng)用的局部會(huì)話外,還通知認(rèn)證中心結(jié)束全局會(huì)話,認(rèn)證中心再通知其他應(yīng)用系統(tǒng)銷毀各自局部會(huì)話,實(shí)現(xiàn)其他應(yīng)用系統(tǒng)的自動(dòng)登出。
3.2.2 CAS Server的部署和配置
(1)部署環(huán)境配置。
該系統(tǒng)選擇將CAS Server部署到Tomcat[17]服務(wù)器。為增強(qiáng)系統(tǒng)安全性和啟用CAS Server的單點(diǎn)登錄功能,需要對(duì)CAS Server的安全證書進(jìn)行管理。該過程使用Java自帶的證書管理工具keytool生成證書并導(dǎo)入到CAS Server的執(zhí)行環(huán)境中,在Tomcat配置文件server.xml中添加對(duì)HTTPS連接支持的配置,關(guān)鍵配置如下:
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]進(jìn)行項(xiàng)目管理。項(xiàng)目默認(rèn)沒有提供MySQL數(shù)據(jù)庫(kù)的連接和認(rèn)證的依賴包,部署時(shí)需要添加相關(guān)依賴包的配置,配置位于CAS Server項(xiàng)目的pom.xml文件中。
(3)CAS Server數(shù)據(jù)庫(kù)、密碼規(guī)則配置。
CAS支持對(duì)數(shù)據(jù)庫(kù)的連接和使用數(shù)據(jù)庫(kù)作為認(rèn)證數(shù)據(jù)源,有多種密碼驗(yàn)證規(guī)則可供選擇。對(duì)CAS Server的數(shù)據(jù)庫(kù)連接、獲取認(rèn)證數(shù)據(jù)和密碼驗(yàn)證規(guī)則設(shè)置在配置文件application.properties中,添加的配置如圖4所示。
圖4 CAS中數(shù)據(jù)庫(kù)和密碼驗(yàn)證規(guī)則配置
3.2.3 CAS Client的使用
CAS Client以包或庫(kù)的形式被集成到待認(rèn)證的應(yīng)用系統(tǒng),保護(hù)應(yīng)用系統(tǒng)中訪問受限的資源。應(yīng)用系統(tǒng)不必在應(yīng)用內(nèi)對(duì)用戶身份進(jìn)行認(rèn)證,而是將認(rèn)證工作重定向到CAS Server進(jìn)行處理。CAS Client能夠支持多種編程語言開發(fā)的應(yīng)用系統(tǒng),包括Java,.Net,PHP,Perl等。
CAS Client與Web應(yīng)用整合時(shí)只需關(guān)注兩個(gè)方面,分別是請(qǐng)求路徑是否需要跳轉(zhuǎn)到登錄頁面和重定向用戶到請(qǐng)求的資源。認(rèn)證工作可通過設(shè)置過濾器(Filter)[19]配置完成,將配置中的過濾器和監(jiān)聽器配置成的站點(diǎn)和重定向目標(biāo)配置成CAS Server對(duì)應(yīng)的接口。
(1)Liferay的部署配置。
為避免數(shù)據(jù)的冗余,該系統(tǒng)中Liferay與CAS使用同一份用戶信息。Liferay使用數(shù)據(jù)庫(kù)數(shù)據(jù)需要與MySQL進(jìn)行對(duì)接,并使密碼驗(yàn)證規(guī)則相互匹配。需要在Liferay的啟動(dòng)配置文件portal-setup-wizard.properties中添加相關(guān)配置,如圖5所示。
(2)Liferay對(duì)接CAS設(shè)置。
為使Liferay啟用CAS單點(diǎn)登錄功能,需要在其系統(tǒng)設(shè)置中與CAS進(jìn)行對(duì)接。需要在認(rèn)證的設(shè)置中配置CAS單點(diǎn)登錄的登錄URL、退出URL、服務(wù)器名和服務(wù)器URL等。
該系統(tǒng)提供普通用戶自定義門戶桌面內(nèi)容的功能,用戶可進(jìn)行個(gè)性化設(shè)置,發(fā)布公告、文章、文檔、圖片等。管理員可對(duì)用戶、組織和角色等信息進(jìn)行管理。
圖5 數(shù)據(jù)庫(kù)和密碼驗(yàn)證規(guī)則配置
基于CAS單點(diǎn)登錄和Liferay門戶,以關(guān)系數(shù)據(jù)庫(kù)為數(shù)據(jù)存儲(chǔ)基礎(chǔ)設(shè)計(jì)與實(shí)現(xiàn)了統(tǒng)一身份認(rèn)證系統(tǒng),達(dá)到整合用戶身份信息、集中應(yīng)用系統(tǒng)入口和統(tǒng)一系統(tǒng)信息管理的目的。該系統(tǒng)為用戶間進(jìn)行信息共享和交流提供了一個(gè)良好的平臺(tái),并進(jìn)一步提高了各系統(tǒng)間協(xié)同工作的能力,同時(shí)降低了用戶信息管理的難度和成本。在未來的工作中,將繼續(xù)深化對(duì)統(tǒng)一身份認(rèn)證系統(tǒng)的開發(fā)、建設(shè)和推廣工作。不僅要將現(xiàn)有的應(yīng)用系統(tǒng)納入到統(tǒng)一身份認(rèn)證平臺(tái)中進(jìn)行管理,而且要對(duì)新的應(yīng)用系統(tǒng)進(jìn)行推廣并對(duì)開發(fā)人員提供幫助,使統(tǒng)一身份認(rèn)證系統(tǒng)得到更廣泛的支持和認(rèn)可,削弱乃至消除信息孤島的存在。