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