郭 磊,葉茂枝
(1.武夷學院,福建 武夷山354300;2.寧德師范學院,福建 寧德 352100)
近年來,隨著電子政務的廣泛應用和企業信息化建設的飛速發展,信息系統及各種應用已經滲透到政府、企業的方方面面,許多部門也開始了對原有工作流的改造.與此同時,大量以數據為基礎,以聯機分析為特點的信息系統開始出現,而這些系統之間不可避免地存在著大量的業務交叉和流程互動,在這樣的背景下,就急需建立一個統一的平臺,對用戶和分散的業務系統進行集中管理.該平臺能提供一個方便快捷、安全保障的機制來對Web資源進行統一認證授權,實現單點登錄.本文結合現有單點登錄模型的優點,并與SAML技術結合,提出了一個更安全、易構建的單點登錄模型.
單點登錄是目前政府、企業、學校使用的一種主要的資源統一管理解決方案,國外許多軟件公司與組織,如CA公司、Microsoft公司等在該方面都有一些產品和標準.
電子商務的領航廠商CA公司推出了eTrust安全解決方案,為電子商務企業級平臺提供單點登錄.它將現有的C/S架構和B/S架構系統的訪問集中處理,為現有的電子商務企業聯盟的建立提供便利.
2001年 9月,SunMicrosystems與其他13家公司建立了自由聯盟計劃(LibertyAllianceProject),并制定了定義聯盟標識的一種規范,提倡一種開放的、能夠容納多種身份認證機制的分散系統.聯盟表示可以在一組信任的對等實體間共享身份認證信息,從而實現SSO.LibertyAlliance認證規范是建立在OASIS SAML規范的基礎上,并擴充了OASISSAML規范.
Microsoft公司也推出了它的單點登錄平臺.NETPassport[1-3].用戶通過Passport服務器進行身份認證,完成認證后,Passport服務器會向用戶發送一個含有該用戶全局認證信息的加密Cookie,然后根據用戶請求生成一個與之相關的加密票據,并將票據附加在HTTP請求中,最后將用戶重定向到目標站點,目標站點通過票據確認用戶身份認證信息.
CAS(CentralAuthenticationServeice)是最初由Yale大學的ITS開發的一套JAVA實現的開發源代碼的SSO服務.該服務使用一個JAVAWeb應用程序來實現,使用時需要將這個Web應用程序發布到一個Servlet2.3兼容的服務器上,并且服務器需要支持SSL.CAS認證的結果以XML的格式返回,能夠被各種客戶端讀取.
Oracle9iASSSO則為多種Web平臺提供統一用戶身份認證框架[4].其實現單點登錄的核心組件是SSOServer,它將需要整合的Web應用分為2類:伙伴應用(PartnerApplication)和外部應用(External Application).伙伴應用與SSOServer緊密結合,委托SSOServer完成用戶身份認證.外部應用擁有獨立的身份認證模塊.SSOServer將用戶登錄憑證自動交到外部應用,模擬用戶手工登錄過程.
現有的單點登錄模型種類繁多,主要有以下3種:基于經紀人的單點登錄模型(Broker-BasedSSO)、基于代理的單點登錄模型(Agent-BasedSSO)、基于網關的單點登錄模型(GateWay-BasedSSO).
(1)基于經紀人的單點登錄模型(Broker-Based SSO).該模型均設有一個集中的認證和用戶賬戶管理服務器,所有的客戶端在訪問應用系統之前,需在該服務器上進行身份認證.認證完成后,服務器會給客戶端一個保護身份信息的電子憑證.客戶憑此憑證即可在該認證服務器范圍內的應用系統實現單點登錄.該模型結構簡單,但應用系統需要解析用戶的電子身份憑證,這就需要對現有的應用系統進行改造,工作量大.目前采用這種模式的產品很多,如Kerberos、sesame、IBMKryptoKnight等.
(2)基于代理的單點登錄模型(Agent-Based SSO).在該模型中,有一個自動為不同的應用程序認證用戶身份的代理程序,這個代理程序需要根據應用設計不同功能,如它可以利用口列表或USBKEY來自動認證,從而減輕用戶負擔.代理程序在服務器的認證系統和客戶端認證方法之間充當一個“翻譯”的角色.該模型保證了通道的安全和單點登錄,具有較好的靈活性和可實施性,但其需要本機存儲用戶憑證,這樣就增加了口令泄漏的危險.該模型的典型實例是SSH.
(3)基于網關的單點登錄模型(GateWay-Based SSO).在基于網關的單點登錄模型中,網關是一個隔離設備,它一端連著所有的客戶端,另一端連著所有的應用系統,它將外部的客戶端和內部的系統資源完全地隔離開.由于網關后的各種應用系統處在同一個可信任的網絡中,可使用IP地址來表示各應用系統.網關連接的用戶信息數據庫中建立了用戶的身份標識和其被授權訪問的應用系統IP地址之間的映射關系.網關只需要知道用戶的身份標識,便可授權其訪問相應系統,不需多余認證.該模型將所有的安全和身份認證都集中于網關,它的性能制約著單點登錄系統的效率.
安全聲明標記語言(SecurityAssertionMarkup Language,SAML)是由結構化信息標準促進組織(OASIS)的安全服務委員會(SSTC)提出的,用來在不同信任域之間交換安全信息.SAML為認證和授權服務提供了標準的描述,基于XML具有跨平臺性,提供強大的斷言(Assertion)機制,使得跨域的系統可以通過斷言來進行驗證,適用于Web服務的松耦合環境.
XKMS是由 W3C 提議 ,由 Microsoft、Versign和WebMethods共同發起的一項技術,其關鍵目的是支持基于XML的信任Web服務的開發,該服務可用于處理和管理基于PKI的加密密鑰.通過XKMS可消除使用PKI時的復雜性,使各種Web服務更加容易地與安全機制結合.
通過對現有模型進行分析,可見現有的單點登錄模型均有一些缺陷.本文擬結合基于代理的單點登錄模型與基于經紀人的單點登錄模型,并采用SAML體系,設計一個可方便實現的單點登錄模型.
本模型采用一個層式結構,同時支持分布式系統的授權管理和異構系統的通用型平臺.在模型中的接口使用開發標準以支持各種應用,并提供用戶管理、授權管理等服務,同時提供各種外部應用系統的訪問接口,方便集成.模型結構如圖1所示.
在模型中設置了一個權限管理數據庫,它是系統權限集中管理的關鍵,它提供了訪問控制策略的管理.訪問控制策略采用基于角色的權限控制體系,實現了用戶身份信息提供、協助用戶產生用于身份認證的SAML認證聲明等功能,并提供用戶登錄的應用系統授權策略.
統一認證模塊是本模型的核心,它實現用戶的身份認證與跨域、跨應用登錄.本模塊提供一個面向各種應用平臺的統一認證授權接口.該接口采用基于WS-Security協議和SAML規范,為各種平臺下的前端客戶端提供一個統一認證授權接口API,其中包含用戶信息認證與憑證生成,接收和回應認證請求,對安全令牌的組裝、發送和管理等.此外,本模塊還為各種應用提供驗證安全令牌和提取權限信息的接口API.

圖1 模型結構圖
在模型中,采用SAML斷言為會話令牌,令牌中含有用戶的身份信息和屬性信息,為防篡改和冒用,對這些信息均進行了加密和數字簽名,以此形成了安全的SAML令牌.接受到此令牌的服務可通過對簽名的驗證確認令牌發行者身份,同時也認證了訪問者身份.在令牌中含有訪問者的身份和屬性信息.可根據這些信息與權限管理數據庫聯系,并獲得用戶訪問權限.用戶登錄系統后,用戶代理會協助用戶完成以上認證過程,并在用戶跨應用時實現自動登錄與退出.具體登錄過程如圖2所示.

圖2 登錄流程圖
(1)用戶訪問某個Web服務,服務向用戶代理(Agent)索取用戶的SAML令牌.用戶代理若能提供令牌并且合法,則成功登錄;若無令牌或不合法,則將用戶重定向到登錄界面.
(2)用戶登錄過程完成后,認證服務器在一定規則下,頒發給用戶一個身份認證令牌,將用戶重定向至用戶所申請的服務.
(3)用戶代理向服務提供用戶身份令牌,服務向認證服務器確認用戶身份后,完成登錄.
在本模型中,統一認證模塊是關鍵功能模塊.在認證過程中,必須讓用戶跨域、跨服務時,無需重復輸入用戶名與密碼,可實現自動登錄,而這個過程可由用戶代理完成.統一認證過程如下:
(4)客戶代理根據用戶的用戶名、密碼生成用戶令牌UT(UserToken),并持用戶令牌向認證中心認證,索取安全令牌ST(SecurityToken),在認證中心生成的ST中包含有UT及認證相關信息.為保證二者傳輸過程的安全性與完整性,傳輸過程全部使用數字簽名.客戶端用私鑰對UT進行加密,并隨機產生一對密鑰,使用認證中心的公鑰進行加密,使得只有通過認證中心才可以查看該密鑰,保證對稱密鑰的安全,這個密鑰將用于之后用戶與認證中心之間的消息傳遞加密.
(5)認證中心用自己的私鑰解開用戶申請,獲得對稱密鑰,并利用用戶公鑰對對UT進行驗證,查看用戶合法性.
(6)通過校驗后,認證中心發放ST,ST采用認證中心自身私鑰簽名,而后用用戶代理與認證中心之間的對稱密鑰進行加密.用戶代理獲得信息后進行解密,驗證簽名后得到ST.
(7)用戶訪問別的服務時,用戶代理只需持ST即可向對應服務發起申請,服務向認證中心確認用戶身份后,確認登錄,實現了單點登錄.
授權與認證是緊密聯系的兩個過程,在用戶身份驗證完成后,即可實現授權.在統一授權的過程中,主要是將用戶的權限信息發送給服務,權限的控制則由服務實現.
本模型將將授權模塊與認證模塊放在同一臺服務器上,這主要是考慮將權限模型進行集中描述.用戶訪問服務時,需持ST至中心的授權模塊請求授權決策聲明,而后再返回目標服務站點,通過聲明申請權限授予.同樣,采用數字簽名保證聲明的安全性.
在現有的單點登錄模型中,絕大部分均使用PKI是為了保證安全,但其部署十分繁瑣.本文擬采用一個基于XKMS的密鑰管理模型,將XML與PKI結合,使用戶與復雜的PKI體系結構分離,又方便使用PKI提供的密鑰服務.在本模型中,使用了XML數字簽名技術讓發送方提供SAML消息簽名,保證ST的完整性和私密性.具體流程如下:
發送方:
(1)發送方與接收方均生成RSA密鑰對,其中公鑰在 XMKS服務注冊處進行注冊,私鑰用于生成SAML數字簽名.
(2)發送方將用戶信息等生成散列消息,并利用私鑰與散列消息生成SAML數字簽名.
(3)發送方將公鑰、原始消息與SAML數字簽名組成簽名消息并發送給接收方.
(4)發送方再生成一對對稱密鑰,用密鑰將SAML信息加密,再用接收方的公鑰加密對稱密鑰與SAML信息,將加密的SAML信息與對稱密鑰發送給接收方.
接收方:
(1)接收方收到SAML簽名消息后首選驗證數字簽名,通過后解密聲明消息,而后用原始消息計算散列消息.
(2)到XKMS處獲得發送方公鑰,解密SAML簽名并與計算得到的散列消息進行匹配,驗證散列消息的完整性.
(3)接收方用自己私鑰解密得到對稱密鑰,用對稱密鑰解密得到SAML原始信息,用戶認證完成.
本模型在現有模型的基礎上進行改進,利用XML數字簽名與加密技術來構建用戶、認證服務器、Web服務三方的安全通道,引入XKMS來提供密鑰管理,在較大程度地提高安全性的同時,還讓整個模型更易部署.主要分析有:
(1)采用數字證書進行雙向認證,使用戶、認證服務器和Web服務器的合法性均得到保證.
(2)在模型中采用XML加密實現端到端的安全,并可采用時間標識來保證聲明期限,可有效防止中間人攻擊.
(3)為了防止信息竄改,在模型中使用散列函數進行驗證,用XML簽名進行保護,保證數據的完整性.
本文提出了一種基于SAML的改進型的單點登錄模型,彌補了傳統的單點登錄系統與平臺結合的不足,并在靈活性、可擴展等方面均有較大改善.同時,本文還提出了統一授權模型,使各種服務可更靈活地進行訪問控制與權限管理.最后,本文對認證過程進行分析,讓認證過程更易實現的同時,在一定程度上提高了系統安全性.
[1]戴宗坤,唐三平.VPN與網絡安全[M].北京:電子工業出版社,2002.
[2]張升平,曾理.數字化校園網的構架[J].計算機工程與設計,2008(11):5137-5143.
[3]韓濤,郭荷清.Web服務安全模型的研究與實現[J].計算機工程,2006,32(10):130-134.
[4]董亮衛,汪文勇,黃鸝聲.支持單點登錄的統一資源管理體系研究[J].計算機應用,2006,26(5):1146-1147.
[5]萬燦軍,李長云.開放網絡環境中面向信任的單點登錄[J].計算機工程,2010,36(3):148-151.
[6]孟凡榮.網格中單點登錄的研究[J].通信學報,2007,28(11):81-86.