付影平++杜程++劉建華
摘 要: 基于SAML 的單點(diǎn)登錄基本模型的研究,通過闡述SAML和單點(diǎn)登錄的基本概念和相關(guān)技術(shù),對兩種傳統(tǒng)基于SAML單點(diǎn)登錄的模型Pull和Push深入研究分析,并根據(jù)模型的不足之處提出了一個改進(jìn)型模型。最后對改進(jìn)型模型系統(tǒng)進(jìn)行基于Java模塊化的設(shè)計,并且對每個模塊運(yùn)行流程進(jìn)行了詳盡的描述和介紹,同時對系統(tǒng)進(jìn)行了實(shí)現(xiàn)。該改進(jìn)模型解決了用戶跨越訪問單點(diǎn)登路問題,具有很好的安全性與普通性。
關(guān)鍵詞: SAML; 單點(diǎn)登錄; Pull模型; Push模型
中圖分類號: TN911?34; TP315 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)16?0038?04
Research and design of single sign?on model based on SAML
FU Yingping1, DU Cheng2, LIU Jianhua1
(1. Information Center, Xian University of Posts and Telecommunications, Xian 710061, China;
2. School of Computer Science, Xian University of Posts and Telecommunications, Xian 710061, China)
Abstract: The SAML?based single sign?on model is studied in this paper. The basic concepts and correlation technologies of SAML and single sign?on are elaborated respectively. The two traditional single sign?on models (Pull and Push) based on SAML are analyzed deeply. An improved model based on the inadequacy of the models is proposed. The modular design of the improved model system is carried out based on JAVA. The running process of each module is described and presented in detail. The system was realized.
Keywords: SMAL; single?sign?on; Pull model; Push model
0 引 言
隨著網(wǎng)絡(luò)技術(shù)的廣泛應(yīng)用,人們的日常生活都離不開對網(wǎng)絡(luò)應(yīng)用系統(tǒng)的使用。所有系統(tǒng)都要求用戶在其系統(tǒng)內(nèi)注冊獨(dú)立的賬號,并通過應(yīng)用系統(tǒng)本身的驗(yàn)證機(jī)制對用戶的身份進(jìn)行檢驗(yàn)。大量的用戶賬號,難免會有安全性的隱患。而且,很多應(yīng)用系統(tǒng)的密碼直接使用HTTP POST明文傳送,更降低了網(wǎng)絡(luò)信息的安全性。對于應(yīng)用系統(tǒng)管理人員來說,需要加大維護(hù)用戶身份信息和獨(dú)立的授權(quán)信息,還要經(jīng)常性地添加一些新的安全項(xiàng)目。
對于這種情況,應(yīng)用系統(tǒng)提供方和用戶都急需一種方便快捷、安全性強(qiáng)的技術(shù)。所以找到一種只需身份認(rèn)證一次就可登錄到多個應(yīng)用系統(tǒng)的認(rèn)證方式成為如今研究的焦點(diǎn)。因此,針對網(wǎng)絡(luò)系統(tǒng)易用性和安全性這兩個很難共存的矛盾特性,人們提出了單點(diǎn)登錄技術(shù)(Single Sign On,SSO)這一概念。
1 SAML單點(diǎn)登錄相關(guān)技術(shù)
1.1 單點(diǎn)登錄技術(shù)
單點(diǎn)登錄(Single Sign On)是目前比較流行的企業(yè)業(yè)務(wù)整合解決方案之一。單點(diǎn)登錄技術(shù)模型如圖1所示,當(dāng)用戶第一次訪問應(yīng)用系統(tǒng)a的時候,會被重定向到認(rèn)證系統(tǒng)中進(jìn)行驗(yàn)證;然后認(rèn)證系統(tǒng)對登錄信息進(jìn)行身份驗(yàn)證,如果通過驗(yàn)證,返回給用戶一個認(rèn)證的憑證;用戶再訪問別的應(yīng)用時,應(yīng)用系統(tǒng)接受到請求之后會把身份憑證送到認(rèn)證系統(tǒng)進(jìn)行驗(yàn)證,檢查身份憑證的合法性。如果通過驗(yàn)證,用戶就在不用再次登錄的情況下訪問應(yīng)用系統(tǒng)b。
1.2 SAML模型
安全聲明標(biāo)記語言(SAML)是由OASIS(高級結(jié)構(gòu)化信息標(biāo)準(zhǔn)組織)批準(zhǔn),成為基于XML實(shí)現(xiàn)Web站點(diǎn)之間互操作的安全訪問控制框架體系和協(xié)議。
SAML域模型包括憑證收集器、認(rèn)證實(shí)體、會話實(shí)體、屬性實(shí)體和策略決策點(diǎn)。這些實(shí)體都為單點(diǎn)登錄提供服務(wù)。
憑證收集器:收集用戶身份憑證作為系統(tǒng)驗(yàn)證對象;認(rèn)證實(shí)體:生成認(rèn)證斷言;會話實(shí)體:負(fù)責(zé)維護(hù)會話狀態(tài);屬性實(shí)體:生成屬性斷;屬性倉庫:存儲屬性斷言;策略倉庫:存儲策略;策略決策點(diǎn):為自己或其他請求授權(quán)的系統(tǒng)實(shí)體做出授權(quán)決策。
圖1 SSO技術(shù)模型
2 SAML單點(diǎn)登錄模型研究
2.1 基本模型及安全性分析
基于SAML單點(diǎn)登錄框架有3個實(shí)體組成,分別為:主體,即用戶,發(fā)出訪問請求;源站點(diǎn),負(fù)責(zé)檢驗(yàn)用戶身份,提供給用戶身份憑證;目標(biāo)站點(diǎn):提供和保護(hù)用戶所需的信息。
傳統(tǒng)的基于SAML單點(diǎn)登錄的模型有:Pull模型(如圖2所示)和Push模型(如圖3所示)。
圖2 Pull模型
圖3 Push模型
在Pull模型中,源站點(diǎn)為主體生成令牌來讓目標(biāo)站點(diǎn)使用,這樣導(dǎo)致SAML認(rèn)證聲明不會在隨主體傳輸,而主體常常是最容易被攻擊的實(shí)體,所以增加了系統(tǒng)的安全性。但每次向新的目標(biāo)站點(diǎn)申請服務(wù)時,Pull模型新的目標(biāo)站點(diǎn)都要向源站點(diǎn)發(fā)出請求,而源站點(diǎn)就不得不為主體管理不同的令牌,大量的請求就會造成系統(tǒng)的阻塞,導(dǎo)致各種服務(wù)不能正常運(yùn)轉(zhuǎn)。
在Push模型中,源站點(diǎn)請求目標(biāo)站點(diǎn)為主體生成令牌,而目標(biāo)站點(diǎn)也維護(hù)和管理令牌,這樣管理令牌的工作就由各個目標(biāo)站點(diǎn)來完成,大大減少了源站點(diǎn)的壓力,不容易出現(xiàn)網(wǎng)絡(luò)堵塞。但是由于SAML認(rèn)證聲明會隨著主體進(jìn)行傳輸,導(dǎo)致Push模型安全性方面不如Pull模型。
這2種單點(diǎn)登錄模型在用戶認(rèn)證身份的時候都只進(jìn)行了一次,但每次進(jìn)行新的訪問時,Pull模型中用戶SAML令牌是源站點(diǎn)針對目標(biāo)站點(diǎn)的請求產(chǎn)生的,然而Push模型中用戶SAML令牌是目標(biāo)站點(diǎn)針對源站點(diǎn)發(fā)出的請求來產(chǎn)生的。雖然這2個模型組織構(gòu)成是一樣,但是順序流程不同。這2個傳統(tǒng)的單點(diǎn)登錄模型系統(tǒng)有著以下問題:
(1) 用戶每次想要登錄一個新目標(biāo)站點(diǎn)時,這個目標(biāo)站點(diǎn)就與源站點(diǎn)交換信息,這個過程非常繁瑣,經(jīng)常性的信息交換也容易產(chǎn)生安全性問題。
(2) 目標(biāo)站點(diǎn)和源站點(diǎn)的信息交互造成互相依附性,不能夠靈活的部署。
(3) 這2個模型都需要2個站點(diǎn)其中1個來維護(hù)用戶的令牌,如果短時間內(nèi)維護(hù)了大量用戶令牌或者令牌請求,那么很容易造成網(wǎng)絡(luò)阻塞,甚至服務(wù)器崩潰等問題。
2.2 改進(jìn)的模型
根據(jù)這2個模型的分析,要根據(jù)不同環(huán)境選擇模型,如果有多個目標(biāo)站點(diǎn)Push模型更好一些。但是本文要實(shí)現(xiàn)一個更安全的單點(diǎn)登錄系統(tǒng),所以提出了一個改進(jìn)型模型,見圖4。
圖4 改進(jìn)的模型
改進(jìn)后的模型有以下幾個優(yōu)點(diǎn):
(1) 主體訪問目標(biāo)站點(diǎn)不再需要2個站點(diǎn)間進(jìn)行信息交流,簡化的登錄流程和信息傳輸。
(2) 源站點(diǎn)頒發(fā)的SAML令牌可以被所有信任域內(nèi)的目標(biāo)站點(diǎn)解析查看,這樣使得2個站點(diǎn)更加的靈活和獨(dú)立,減少了部署的難度。
(3) 由主體用戶去維護(hù)SAML斷言令牌,減少了源站點(diǎn)和目標(biāo)站點(diǎn)的維護(hù)壓力。
3 系統(tǒng)的設(shè)計與實(shí)現(xiàn)
3.1 體系框架設(shè)計
基于改進(jìn)模型的SAML單點(diǎn)登錄系統(tǒng)主要由3個大模塊組成,分別是信息安全傳輸處理模塊、客戶端和服務(wù)器端。圖5是整個系統(tǒng)的體系框架。
圖5 體系框架
(1) 信息安全傳輸處理模塊。該模塊主要有是3個功能,XML加密解密、XML數(shù)字簽名產(chǎn)生與驗(yàn)證和XML信息組裝成SOAP消息發(fā)出。XML數(shù)字簽名能夠保證數(shù)據(jù)的完整和可驗(yàn)證性,XML加密用來保證信息的安全性,SOAP消息最為載體將信息發(fā)送出去。
(2) 客戶端:接收用戶信息,產(chǎn)生SAML請求,解析SAML令牌,根據(jù)SAML授權(quán)信息向用戶提供對應(yīng)服務(wù)。
(3) 服務(wù)器端:根據(jù)客戶端通過用戶發(fā)來的SAML請求生成SAML斷言,在對斷言進(jìn)行加密簽名產(chǎn)生SAML斷言令牌,在將令牌通過用戶發(fā)送給客戶端。
這個系統(tǒng)授權(quán)管理放在了客戶端里而不是服務(wù)器端,主要有下面的幾點(diǎn)考慮:
(1) 目標(biāo)站點(diǎn)應(yīng)該是分布式的,所以目標(biāo)站點(diǎn)互相間應(yīng)該有很強(qiáng)的相互獨(dú)立性,應(yīng)對外界訪問權(quán)限應(yīng)該能夠自主決策。
(2) 這種設(shè)計使得系統(tǒng)更加靈活的部署和拓展。
(3) 若授權(quán)管理模塊處在服務(wù)器端,用戶想要訪問一個新的目標(biāo)站點(diǎn),就要先到服務(wù)器端進(jìn)行再次授權(quán),再返回到目標(biāo)站點(diǎn)。這樣增加了步驟,降低了系統(tǒng)效率。
3.2 傳輸模塊設(shè)計
在基于SAML的SSO系統(tǒng)中,傳輸模塊是每個節(jié)點(diǎn)相互連接的基礎(chǔ)。將XML消息組裝成SOAP消息或者從SOAP中提取XML消息,然后經(jīng)過HTTP協(xié)議傳遞SOAP信息。整體系統(tǒng)的傳輸機(jī)構(gòu)如圖6所示。
圖6 傳輸模塊
傳輸模塊主要由類.TransportMsg來實(shí)現(xiàn)。Public Document Receive(HttpServletResponse HttpRequest),該方法用于站點(diǎn)接收到網(wǎng)絡(luò)中傳輸過來的HttpServletRequest對象,并從其中提取SOAP消息,然后從SOAP Envelope中提取SOAP Body,并將SOAP Body的根元素轉(zhuǎn)換成Document對象,返回斷言請求消息的Document對象。這個方法實(shí)現(xiàn)了信息轉(zhuǎn)換和通信的請求與應(yīng)答過程,傳輸模塊封裝了底層消息和HTTP連接協(xié)議,提供給最上層應(yīng)用程序簡明的消息傳輸體系。
3.3 信息安全處理模塊設(shè)計
與傳輸模塊一樣,信息安全處理模塊如圖7所示,也是通用模塊,需要同時部署到SSO客戶端和服務(wù)器端。
圖7 信息安全處理模塊
信息安全處理模塊主要由以下2個類來實(shí)現(xiàn)。
(1) 安全處理類XMLFile。XMLFile類可以對任何XML文檔以及文檔中的任意指定部分進(jìn)行安全處理。對于本系統(tǒng),安全處理模塊使用在SSO 服務(wù)器端和SSO客戶端中,這對XMLFile類本身并沒有影響,惟一不同的是2個站點(diǎn)使用的XML文檔和密鑰不同。
(2) 加密,數(shù)字簽名類MD5Encrypt。MD5Encrypt類是開源的加密應(yīng)用程序,MD5是一種散列式加密算法,具有高速、安全、高效等特點(diǎn)。由于JDK7工具包中自帶這個加密算法類庫,所以本系統(tǒng)應(yīng)用這個進(jìn)行加密和數(shù)字簽名。
3.4 SSO服務(wù)器端設(shè)計與實(shí)現(xiàn)
根據(jù)SAML單點(diǎn)登錄的系統(tǒng)總體架構(gòu),SSO服務(wù)器端模塊如圖8所示,包括SAML解析器、身份認(rèn)證模塊、SAML斷言生成器模塊和用戶數(shù)據(jù)庫。
圖8 SSO服務(wù)器端模塊
(1) 用戶通過信息安全傳輸模塊將身份信息一些標(biāo)識性信息發(fā)送到SSO服務(wù)端。
(2) SAML解析器對消息進(jìn)行解析,提取用戶信息,并發(fā)往身份認(rèn)證模塊。
(3) 身份認(rèn)證模塊對解析后的信息進(jìn)行驗(yàn)證并將信息與用戶身份庫信息進(jìn)行對比確認(rèn)。
(4) 根據(jù)對比確認(rèn)判斷用戶信息合法性,然后提取庫中的用戶屬性信息最后將這些屬性信息提交給SAML斷言生成器,為用戶生成SAML斷言令牌。
(5) SAML斷言生成器將SAML令牌發(fā)送到信息安全傳輸處理模塊進(jìn)行處理返回用戶實(shí)體。
其中SAML解析模塊由SAMLRequest類實(shí)現(xiàn)。SAML解析模塊從SAMLRequest所包含的Query對象中取出其中所包含的用戶身份信息。解析請求的方法通過對SAMlRequest的解析,返回一個包含用戶信息、屬性信息和標(biāo)識信息的HashMap對象,進(jìn)而可以從中提取出信息。身份認(rèn)證模塊使用用戶名和屬性信息對用戶身份進(jìn)行驗(yàn)證,并通過查詢數(shù)據(jù)庫中用戶的資源返回資源列表。
SAML斷言生成模塊的實(shí)現(xiàn)由samlsso.saml包中的很多類來完成的:
SAMLResponse:繼承了BaseResponse類,可以包含多個Assertions;SAMLAssertion:該類表示一個完整的斷言,即SAML令牌;SAMLAttribute:屬性類,包括屬性名、屬性值和命名空間等,用以表示某種屬性的名稱和屬性值等信息;SAMLStament為抽象類,是所有聲明的公共基類。
3.5 SSO客戶端設(shè)計與實(shí)現(xiàn)
在客戶端中對于普通用戶可以使用原有Web站點(diǎn)自有的登錄模塊登錄,使用Web服務(wù)。對于單點(diǎn)登錄用戶,首先用戶發(fā)送請求經(jīng)過信息安全傳輸處理模塊發(fā)送到認(rèn)證代理(SAML解析器),經(jīng)過解析將用戶信息和SSO服務(wù)器身份,提交給授權(quán)模塊。授權(quán)模塊收到用戶信息后,與用戶權(quán)限庫信息進(jìn)行比對,根據(jù)用戶信息權(quán)限提供Web服務(wù)。認(rèn)證代理模塊的實(shí)現(xiàn)的部分類如下:
Public User getUserlnfo(Document doc),該類的作用是根據(jù)doc對象取得用戶的屬性信息,返回用戶對象。Public Identifier getldentifier(Document doc),該類的作用是根據(jù)doc對象取得用戶添加的標(biāo)識信息,返回標(biāo)識對象。Public Static User getUser(SAMLResponse response),該類主要用于從SAML令牌中解析用戶屬性信息。Public Static Boolean verifyUser(User portaluser,User serveruser),該類主要用于檢查從doc對象中獲得的2次User對象是否一致。Public Static Boolean verify7Identifier(Identifier idportal,Identifier idsp),該類用于檢查從doc中獲得的標(biāo)識信息是否與SP需要的一致。
圖9 SSO客戶端
授權(quán)管理模塊:使用Java來實(shí)現(xiàn)認(rèn)證和權(quán)限分配。將所有認(rèn)證和權(quán)限分配部分打包,對外只提供API,這樣既方便了開發(fā)的調(diào)用,又使得不同服務(wù)之間的授權(quán)管理能夠?qū)崿F(xiàn)統(tǒng)一,并且方便管理維護(hù)。
授權(quán)管理對外提供API的類有:登求認(rèn)證,主要實(shí)現(xiàn)根據(jù)用戶名和密碼驗(yàn)證用戶的合法身份;密碼修改,為用戶提供修改密碼的功能;獲取菜單,取得用戶所能使用的菜單;獲取權(quán)限,取得用戶所有權(quán)限;請求檢查,對用戶的HTTP請求進(jìn)行檢查,看用戶是否有權(quán)限得到響應(yīng)。
4 結(jié) 語
單點(diǎn)登錄技術(shù)是現(xiàn)在企業(yè)業(yè)務(wù)整合的關(guān)鍵技術(shù)之一;也是目前實(shí)現(xiàn)為了更有效地使用應(yīng)用系統(tǒng)和管理的方法。本文中通過對基于SAML單點(diǎn)登錄的模型的分析,比較了Pull和Push模型的優(yōu)缺點(diǎn),提出了改進(jìn)的模型。這個模型解決了用戶跨域訪問單點(diǎn)登錄問題,具有很好的安全性和普適性。依據(jù)改進(jìn)后的模型,利用Java開發(fā)平臺給出了基于SAML 2.0規(guī)范的單點(diǎn)登錄系統(tǒng)的模塊設(shè)計。該系統(tǒng)減少了驗(yàn)證用戶聲明的通信,提高了工作效率和系統(tǒng)的安全性,在電子商務(wù)、電子政務(wù)等多應(yīng)用系統(tǒng)中具有非常好的應(yīng)用前景。
參考文獻(xiàn)
[1] 尹星.基于SAML的單點(diǎn)登陸模型及其安全的研究與實(shí)現(xiàn)[D].鎮(zhèn)江:江蘇大學(xué),2005.
[2] HUGHES John, MALER Eve. Technical overview of the OASIS security assertion markup language (SAML) [EB/OL]. [2005?05?11]. http:// www. oasis?open. org/committees/doc?um
ents.
[3] NIE Fengming, XU Feng, QI Rongzhi. SAML?based single sign?on for legacy system Automation and Logistics (ICAL) [C]// 2012 IEEE International Conference on Digital Object Identifier. [S.l.]: IEEE, 2012: 470?473.
[4] 陳天玉,謝冬青,楊小紅,等.基于SAML與XKMS的安全單點(diǎn)登錄認(rèn)證模型的研究與實(shí)現(xiàn)[J].計算機(jī)應(yīng)用研究,2010(3):1019?1021.
[5] 高昊江,肖田元.基于SAML改進(jìn)的單點(diǎn)登錄模型研究[J].計算機(jī)工程與設(shè)計,2011(3):827?829.
[6] 韓偉,范植華.基于SAML的單點(diǎn)登錄技術(shù)在Web服務(wù)中的應(yīng)用研究[J].計算機(jī)工程與設(shè)計,2005(3):634?636.