0 引言
企業(yè)在建立信息化設計之初未曾考慮各個子系統(tǒng)之間的通信問題,隨著時間的推移,企業(yè)所建立的信息系統(tǒng)越來越多,一個需要在多個應用系統(tǒng)之間綜合操作的用戶就必須設置大量的賬號和密碼,極易造成混淆。同時,頻繁的登錄操作還容易造成信息的泄露,這也將帶來嚴重的安全隱患。對于管理者而言,需要維護多個用戶數(shù)據(jù)庫,管理繁瑣。
為了解決上述問題,引入了企業(yè)信息門戶(EIP,EntERPrise Information Portal)的概念。企業(yè)信息門戶涉及用戶界面集成、數(shù)據(jù)集成、業(yè)務流程管理以及單點登錄系統(tǒng)等多個方面,其中首先需要解決的就是單點登錄系統(tǒng)(SSO,Single Sign On)的實現(xiàn)。作為用戶而言,只需進行一次主動的身份認證,隨后就能方便地訪問所有被授權(quán)的數(shù)據(jù)資源而無需再次認證。作為管理者而言,只需維護少數(shù)幾個信息數(shù)據(jù)庫,從而提高了系統(tǒng)的可維護性和整體安全性。
現(xiàn)有的SSO解決方案有微軟的Passport、IBM的WebSphere Portal Server以及Liberty等。這些方案雖然都能夠?qū)崿F(xiàn)單點登錄功能,但各系統(tǒng)分別有著不同的側(cè)重點而且對系統(tǒng)架構(gòu)有著嚴格要求。根據(jù)上述分析,本文提出一種更具靈活性和安全性的單點登錄解決方案,能夠根據(jù)Web服務應用耦合程度不同進行安全域劃分,用戶在某一域內(nèi)跨站點訪問數(shù)據(jù)時,采用Web應用間傳遞票據(jù)的方式進行認證;而用戶如需要跨域進行訪問數(shù)據(jù)時,則需要通過更嚴格的加密Cookie共享機制進行認證。這種動態(tài)認證策略既緩解了認證過程的復雜性,又保證了系統(tǒng)的整體安全性。
1 基于安全域的單點登錄模型概述
1.1 安全域相關(guān)概念
安全和信任已成為Web服務的重要需求之一,針對這一問題,本文提出一種新的安全域概念。一個安全域中的Web應用必須是相互關(guān)聯(lián)且相互信任的,在邏輯和管理意義上處于同一域,并且在同一個安全域內(nèi)實施相同的本地安全策略。
目前,安全域的劃分方式主要包括按業(yè)務劃分和按安全級別劃分。企業(yè)信息門戶系統(tǒng)的用戶經(jīng)常要求在多個相關(guān)的業(yè)務系統(tǒng)之間請求數(shù)據(jù),最理想的辦法是將現(xiàn)有系統(tǒng)按業(yè)務劃分安全域,每個安全域承擔相關(guān)的一類信息服務。這種劃分方法對系統(tǒng)改動最小,劃分形式最簡單,最容易實施,同時又保證了域內(nèi)訪問的高效性以及跨域訪問的安全性。
1.2 基于安全域的單點登錄模型
現(xiàn)有的單點登錄系統(tǒng)無論在靈活性還是安全性上都無法同時滿足企業(yè)信息門戶系統(tǒng)的現(xiàn)實要求,針對此問題在上述技術(shù)分析的基礎(chǔ)上提出一種基于安全域的單點登錄模型。根據(jù)請求訪問同一域內(nèi)的業(yè)務和請求跨域訪問分別提出了兩種不同級別的認證機制,模型結(jié)構(gòu)如圖1所示。
圖1 基于安全域的單點登錄模型整體架構(gòu)
由圖1可知,基于安全域的單點登錄模型主要包括企業(yè)信息門戶,認證中心以及劃分了安全域的眾多業(yè)務系統(tǒng)。安全域是依據(jù)業(yè)務系統(tǒng)的服務類型劃分的,而與各個業(yè)務系統(tǒng)的實際地理位置沒有關(guān)系,圖中將同域的各業(yè)務系統(tǒng)放置在一起只是邏輯意義上的,真正區(qū)別業(yè)務系統(tǒng)所屬哪個安全域則是依據(jù)業(yè)務信息表中標注的安全域ID。
2 基于安全域的單點登錄系統(tǒng)設計
根據(jù)上述提出的模型,給出單點登錄系統(tǒng)各模塊的設計細節(jié),主要包括企業(yè)信息門戶和認證中心兩大模塊。基于安全域的單點登錄分為單域登錄、域內(nèi)跨站點訪問和跨域訪問,分別給出其流程細節(jié)。
2.1 系統(tǒng)各模塊的設計細節(jié)
2.1.1 企業(yè)信息門戶
企業(yè)信息門戶對所有用戶提供統(tǒng)一的單點登錄入口和登錄驗證,并提供所有業(yè)務系統(tǒng)的鏈接。用戶首次訪問業(yè)務數(shù)據(jù)時會被要求向認證中心提供用戶名和口令進行驗證。其中,用戶名被映射為一個能被所用應用系統(tǒng)識別的ID號,如果通過驗證,就會返回用戶請求的業(yè)務數(shù)據(jù),而內(nèi)部的驗證過程對用戶是透明的。
2.1.2 認證中心
認證中心是整個系統(tǒng)的中心,具體由LDAP服務器,Cookie服務器和認證中心服務器組成。主要用于向用戶提供注冊服務,向所有業(yè)務系統(tǒng)提供認證服務,同時向用戶提供統(tǒng)一的調(diào)用接口。對各服務器重要功能分析如下。
(1)LDAP服務器
LDAP全稱為Lightweight Directory Access Protocol,是一個輕量級目錄訪問協(xié)議。該協(xié)議是基于X.500標準的,與X.500不同的是LDAP支持TCP/IP,這對訪問Internet來說是必須的。LDAP實際上是一種特殊的數(shù)據(jù)庫,與一般數(shù)據(jù)庫不同,LDAP對查詢進行了優(yōu)化,特別適用于查詢和更新操作密集型的服務。正因為如此,LDAP用于單點登錄系統(tǒng)中用戶信息的存儲效率極高。認證中心每次得到認證請求后都要訪問LDAP服務器中的用戶信息表,具體如表1所示,根據(jù)用戶當前信息判斷用戶的權(quán)限,從而決定是否對用戶的請求授權(quán)。對于用戶的每次訪問,認證中心還要及時更新用戶信息表中的動態(tài)表項,為下次認證提供依據(jù)。
表1 SSO-USER信息表
單點登錄用戶信息表記錄了USER_LEVEL,根據(jù)用戶的級別來裁定用戶是否有訪問某個業(yè)務系統(tǒng)的權(quán)限。用戶的LOGIN_TIME用于記錄用戶首次登入系統(tǒng)的時間,根據(jù)當前時間和LOGIN_TIME進行運算得出的時差來判斷用戶是否仍在權(quán)限有效期內(nèi)。而LOGOUT_TIME用于記錄用戶登出的時間,如果LOGOUT_TIME早于LOGIN_TIME則可以判定用戶仍處于登入狀態(tài);反之用戶已經(jīng)登出系統(tǒng),如需訪問業(yè)務系統(tǒng)必須重新登錄。TOKEN_ID是用戶成功登錄后系統(tǒng)分配的隨機登錄票據(jù),是用于記錄用戶狀態(tài)的唯一標識和憑證。TOKEN_ID會被存入認證中心的Cookie中,即使用戶進行跨域訪問業(yè)務數(shù)據(jù),也有一種統(tǒng)一的辦法獲得此票據(jù)。LAST_SERVICE記錄了用戶訪問的最后一個服務,當用戶再次訪問其他服務時此字段會被驗證,用戶每次注銷后,LAST_SERVICE的值都會被清空。LAST_SERVICE將被作為外鍵和用戶當前要訪問的安全域業(yè)務表相關(guān)聯(lián),安全域業(yè)務信息表如表2所示。如果用戶這次要訪問的服務與上次訪問的服務處于同一安全域,則會通過驗證和授權(quán)。如果當前安全域的業(yè)務表中不包含上次訪問的服務,則會通過查證Cookie服務器中的相應Cookie來進行更嚴格的驗證。
表2 安全域業(yè)務信息表
安全域業(yè)務信息表中,SERVICE_ID用于唯一標明業(yè)務服務,DOMAIN_ID用于區(qū)分此項業(yè)務服務屬于哪個安全域。ACCESS_LEVEL規(guī)定了此信息服務的訪問權(quán)限,對應于SSO_USER表中的USER_LEVEL,只有用戶級別高于或等于本業(yè)務服務的ACCESS_LEVEL才能有權(quán)限訪問。
(2)Cookie服務器
Cookie服務器用于生成和更新用戶訪問業(yè)務信息系統(tǒng)所產(chǎn)生的Cookie。Cookie通常是伴隨著用戶請求和頁面響應在服務器和瀏覽器之間傳遞。在采用Cookie來保存用戶瀏覽信息時,所有的信息都是存儲在客戶方,并且是以明文方式存放。這對于安全性要求很高的單點登錄系統(tǒng)來說存在著嚴重的安全隱患,不能直接將普通的Cookie應用于系統(tǒng)設計。
基于安全域的單點登錄系統(tǒng)提出了一種能夠提供跨域訪問的加密Cookie解決方案。Cookie服務器中為每個安全域設置一個域Cookie文件,具體記錄了所有用戶對本安全域內(nèi)業(yè)務信息系統(tǒng)的訪問信息。其中應包含Cookie ID編號,作為Cookie文件檢索的標識;安全域編號Domain ID,用以表示屬于哪個安全域;所有用戶的訪問信息,包括對應用戶的IP、所訪問的業(yè)務信息系統(tǒng);還應包含Cookie的生成時間和有效期限。
由于域Cookie用于保證用戶能夠獲得跨安全域訪問的授權(quán),各安全域?qū)ο鄳狢ookie的加密方式各不相同,都有自己的一對公開加密密鑰和保密解密密鑰。Cookie服務器在向客戶瀏覽器發(fā)布摘要Cookie之前會使用產(chǎn)生此Cookie文件的安全域的加密密鑰對其進行加密。而用戶下次訪問業(yè)務信息系統(tǒng)時會提供自己的Cookie文件,如果此安全域正是產(chǎn)生用戶提供的Cookie的安全域,則業(yè)務系統(tǒng)能使用自己的解密密鑰對其解密并獲得其中的認證票據(jù)信息,否則無法對其解密。
。3)認證中心服務器
認證中心服務器能夠接收來自各個安全域的認證請求,管理著用戶的全局信息數(shù)據(jù)庫,負責用戶的登錄,認證,授權(quán)和登出等操作。認證中心服務需要訪問存放于LDAP服務器中用戶表,以完成用戶的登錄驗證。當某安全域向認證中心提出認證請求時,認證服務器會首先查看用戶信息表,驗證用戶是否已登錄,是否有訪問此業(yè)務服務的權(quán)限,以及是否訪問過同域的業(yè)務服務。當認證中心認定用戶是以跨域的形式訪問時,會向Cookie服務器提出驗證請求,查找用戶的訪問記錄。每次訪問后,認證中心還要更新LDAP服務器和Cookie服務器中相應的數(shù)據(jù)。
2.2 基于安全域的單點登錄流程
2.2.1 單域登錄流程
用戶在首次登陸系統(tǒng)時訪問業(yè)務服務系統(tǒng)A1,其登錄流程如圖2所示。對其流程的詳細描述如下。
圖2 單域登錄流程
。1)用戶首次訪問安全域A中的業(yè)務服務系統(tǒng)A1,請求相應的數(shù)據(jù)。
(2)業(yè)務服務系統(tǒng)A1并不馬上對用戶提供的Cookie進行解密(有可能用戶根本就沒有業(yè)務服務系統(tǒng)A1的Cookie),而是向認證中心提起認證請求。
。3)認證中心通過查看LDAP服務器中此用戶的信息表得知用戶尚未登錄系統(tǒng),因此將告知門戶系統(tǒng)未通過認證。
。4)門戶系統(tǒng)將登錄頁面返回給用戶,要求用戶提供用戶名和密碼等登錄信息。
。5)用戶將輸入的用戶信息提交給認證中心,認證中心通過對比LDAP服務器中的用戶信息得知用戶是合法的。然后會更新用戶信息表中的LOGIN_TIME為當前時間,并分配給用戶一個隨機TOKEN_ID。
。6)最終,認證中心將認證結(jié)果與包含使用安全域A的公開密鑰加密過的票據(jù)一同提供給業(yè)務服務系統(tǒng)A1。A1收到驗證結(jié)果后會使用安全域A的解密密鑰將票據(jù)解密,從中讀取驗證結(jié)果。
。7)A1通過驗證票據(jù)信息合法,決定向用戶提供所請求的數(shù)據(jù)。與數(shù)據(jù)一同傳遞給用戶的還包括這次數(shù)據(jù)訪問經(jīng)過安全域A的加密密鑰加密的Cookie文件。
。8)同時,A1還會更新認證中心的相關(guān)數(shù)據(jù),這包括將LDAP服務器中最近訪問數(shù)據(jù)的用戶信息表中的LAST_SERVICE改為A1,同時將此次用戶訪問信息添加到Cookie服務器內(nèi)安全域A的Cookie文件中,具體的內(nèi)容應和傳遞給用戶的Cookie文件完全一致。
圖2所示的首次訪問流程過后,認證中心有了此用戶的一次訪問記錄,而用戶瀏覽器也有了一份加密的Cookie文件,其中包含了認證票據(jù)和當次訪問的記錄。這些信息都給用戶再次訪問安全域A中的其他服務提供了參考依據(jù)。
2.2.2 域內(nèi)跨站點訪問流程
假定剛訪問過安全域A中業(yè)務服務系統(tǒng)A1的用戶又要訪問同一安全域中的業(yè)務服務系統(tǒng)A2,此次訪問屬于域內(nèi)跨站點訪問,具體流程如圖3所示。對其分析闡述如下。
圖3 域內(nèi)跨站點訪問流程
。1)用戶請求訪問安全域A中的業(yè)務服務系統(tǒng)A2,并向其提供訪問過A1的Cookie文件。
。2)業(yè)務服務系統(tǒng)A2并不立即試圖對其解密,而是請求認證中心認證用戶的權(quán)限。
。3)認證中心通過查詢用戶信息表中的USER_LEVEL字段的值得知用戶有權(quán)限訪問A2,并且上次訪問過的服務為同域的A1,此時認證中心不必查看安全域A的Cookie文件,直接將授權(quán)用戶訪問的認證結(jié)果返回給A2。
。4)A2收到認證中心的認證結(jié)果后仍會對用戶提供的Cookie文件進行解密,從中獲取票據(jù),驗證后向用戶傳遞所訪問的數(shù)據(jù),同時傳遞此次訪問服務的加密Cookie文件。
。5)此后,A2還要向認證中心提交此次用戶的訪問信息,供認證中心更新數(shù)據(jù)。其中包括將用戶的LAST_SERVICE改為A2,將傳遞給用戶的Cookie文件內(nèi)容更新到安全域A的Cookie文件中。
經(jīng)過此次訪問,認證中心仍然只有用戶對安全域A的訪問記錄,而用戶的瀏覽器Cookie中也只有兩次訪問安全域A中業(yè)務服務的記錄。由于不同安全域采用的安全策略的不同,這些信息都不能作為用戶訪問其他安全域的依據(jù)。
2.2.3 跨域訪問流程
用戶已經(jīng)成功登錄SSO系統(tǒng),并且成功訪問了安全域A中的兩個業(yè)務服務系統(tǒng)A1和A2,F(xiàn)該用戶需要訪問安全域B中的業(yè)務服務系統(tǒng)B1,這屬于跨域訪問,具體流程如圖4所示。與域內(nèi)跨站點訪問相比,跨域訪問的流程大體相似,只有某些步驟的實際實現(xiàn)方式的不同,并沒有過于復雜的過程,也不涉及其他域,同時能夠保證系統(tǒng)的安全性。
圖4 跨域訪問流程
由圖4可知,跨域訪問流程敘述如下。
(1)用戶請求訪問業(yè)務服務系統(tǒng)B1,并向其提供Cookie文件(只能獲取Cookie ID)。
。2)業(yè)務服務系統(tǒng)B1向認證中心提起認證請求,并將用戶提供的Cookie ID傳遞給認證中心。
。3)認證中心首先查看LDAP服務器中該用戶的信息表,得知用戶已經(jīng)登錄系統(tǒng),用戶級別高于B1的訪問級別。然后認證中心會通過用戶提供的Cookie ID檢索Cookie服務器中用戶的訪問記錄,并將其通過安全域B的公開加密密鑰而加密為一個摘要Cookie文件,其中包含有此次認證的票據(jù)和權(quán)限認證結(jié)果。最終,將生成的Cookie文件傳遞給業(yè)務服務系統(tǒng)B1。
。4)業(yè)務服務系統(tǒng)B1用自身的保密解密密鑰對收到的Cookie文件進行解密,從中得知認證成功。然后,會將用戶請求的數(shù)據(jù)和包含本次訪問記錄的加密過的Cookie文件一同返回給用戶。
。5)之后,業(yè)務服務系統(tǒng)B1還會向認證中心提交此次用戶訪問的記錄。認證中心會依此將用戶的LAST_SERVICE改為B1,并將傳遞給用戶的Cookie文件更新到Cookie服務器內(nèi)的安全域B的Cookie文件中。
依照上述流程,使用和域內(nèi)訪問相似的步驟就實現(xiàn)了跨域訪問,與其他跨域訪問的實現(xiàn)方案相比,認證快捷高效。同時,通過LDAP服務器和Cookie服務器進一步保證了認證過程的安全性。
3 關(guān)鍵技術(shù)與性能評價
3.1 用戶權(quán)限管理和認證技術(shù)
用戶對任何業(yè)務服務系統(tǒng)的訪問都需要獲得認證中心的認證,否則沒有權(quán)限獲取所需數(shù)據(jù)。同一用戶在不同業(yè)務服務系統(tǒng)中的權(quán)限是不同的,更不能任意進行跨域訪問。所有這些權(quán)限的管理問題都是通過LDAP服務器中的用戶信息和Cookie服務器中的Cookie文件進行管理的。
系統(tǒng)中使用Web Service技術(shù)對認證服務進行封裝。Web Service是一個獨立的,基于標準的分布式組件技術(shù)。這是基于Internet標準和XML技術(shù)來實現(xiàn)的。Web Service能在客戶端和業(yè)務服務系統(tǒng)之間實現(xiàn)一種松耦合關(guān)系,通過XML/SOAP實現(xiàn)消息交換;WSDL對服務進行描述;UDDI對服務進行注冊。
根據(jù)系統(tǒng)需要,使用SOAP借助UDDI注冊中心提供的接口發(fā)出服務請求。UDDI注冊中心為Web Service創(chuàng)建服務描述文件WSDL和獲得服務入口地址,并返回給系統(tǒng)。描述文件包含對消息的數(shù)據(jù)結(jié)構(gòu),端口類型,通信協(xié)議的具體描述。
3.2 安全性能評價
本文將安全域的概念用于設計企業(yè)信息門戶的單點登錄系統(tǒng),與其他框架下的系統(tǒng)設計相比具有以下性能優(yōu)勢:
。1)認證過程中使用的票據(jù)(Token)是由用戶信息和票據(jù)產(chǎn)生時間經(jīng)過連接后生成的,由于用戶的請求行為是隨機的,票據(jù)的真正內(nèi)容實際上也是隨機產(chǎn)生的,這防止了票據(jù)的偽造和破解。不僅如此,票據(jù)產(chǎn)生后還會采用公開的加密算法進行加密,只有對應安全域的保密密鑰才能對其進行解密,從而保證了票據(jù)傳輸過程中的安全性。
。2)由于跨域訪問時用戶提供的Cookie無法被當前域解密,因此必須請求認證中心在驗證用戶身份后返回一個能被當前域解密的Cookie文件,這是在Cookie服務器中的安全域Cookie文件的幫助下實現(xiàn)的。
(3)認證過程中安全信息的交換頻繁進行,保證信息傳輸?shù)臋C密性和完整性對于單點登錄系統(tǒng)則至關(guān)重要。認證中心和各安全域之間的信息交換是基于SOAP協(xié)議的,這是一種基于XML的數(shù)據(jù)格式,能夠由WS-Security規(guī)范來保證,滿足系統(tǒng)端到端的安全級別要求。SOAP中使用的是基于XML Encryption的加密技術(shù),能對消息的部分或全部內(nèi)容進行加密。加密后的XML文檔可傳遞到相應的安全域,對應安全域只能解密與此相關(guān)的文件內(nèi)容,而其他安全域的信息仍是保密的。
4 結(jié)束語
本文介紹了一種企業(yè)信息門戶的單點登錄系統(tǒng)的實現(xiàn),系統(tǒng)實現(xiàn)了基于安全域的單點登錄和跨域訪問。解決了SSO系統(tǒng)不能實現(xiàn)Cookie跨域共享的問題。通過采用LDAP服務器和Cookie服務器保存用戶的信息和訪問記錄,對用戶的域內(nèi)訪問和跨域訪問采用不同的認證機制,既保證了系統(tǒng)的安全性,又實現(xiàn)了認證過程的高效性。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.guhuozai8.cn/
本文標題:一種基于安全域的企業(yè)信息門戶單點登錄系統(tǒng)的設計
本文網(wǎng)址:http://www.guhuozai8.cn/html/consultation/10839414453.html