摘 要: 分析了兩種典型的基于SAML的單點(diǎn)登錄模型,針對(duì)流程復(fù)雜的缺陷進(jìn)行簡(jiǎn)化,,提出改進(jìn)的單點(diǎn)登錄模型,,對(duì)三種模型進(jìn)行比較,分析出改進(jìn)模型所具有的性能優(yōu)勢(shì),。
??? 關(guān)鍵詞: SAML,;單點(diǎn)登錄(SSO);Web服務(wù)
?
Web服務(wù)的出現(xiàn)使得企業(yè)與它的合作伙伴,、客戶以及員工之間的關(guān)系變得更加緊密[1],。雖然Web服務(wù)的真正價(jià)值更多地體現(xiàn)在企業(yè)之間,但是目前許多企業(yè)仍然首先把Web服務(wù)的應(yīng)用限制在企業(yè)內(nèi)部,,這是因?yàn)楫?dāng)前跨域的應(yīng)用面臨著這樣一個(gè)嚴(yán)重問題:當(dāng)用戶登錄到多個(gè)系統(tǒng)上請(qǐng)求服務(wù)時(shí),,用戶可能需要預(yù)先分別在這些站點(diǎn)注冊(cè),然后在每次使用站點(diǎn)服務(wù)時(shí)都要進(jìn)行認(rèn)證,。大量的用戶名和密碼不僅使得用戶難以記憶和區(qū)分,,而且安全風(fēng)險(xiǎn)很大;此外企業(yè)需要花費(fèi)較大的開銷來管理大量用戶信息,。因此,,Web 服務(wù)要想取得成功必須首先解決安全問題[2],,而安全問題的關(guān)鍵在于如何以一種靈活、簡(jiǎn)便,、可互操作的方式來實(shí)現(xiàn)跨多域,、跨異構(gòu)系統(tǒng)的安全的服務(wù)訪問。
1 傳統(tǒng)單點(diǎn)登錄技術(shù)及SAML規(guī)范
對(duì)于如何實(shí)現(xiàn)只需進(jìn)行一次身份認(rèn)證就能訪問多個(gè)服務(wù),,當(dāng)前較好的解決方案就是使用單點(diǎn)登錄SSO(Single Sign On)技術(shù),。使用單點(diǎn)登錄技術(shù),用戶只需在初次登錄時(shí)進(jìn)行一次性認(rèn)證,,即可獲得所需訪問系統(tǒng)和應(yīng)用軟件的授權(quán),。
雖然傳統(tǒng)的單點(diǎn)登錄技術(shù)能在某種程度上實(shí)現(xiàn)“一次登錄,任意訪問”,,但是由于不具備開放性和標(biāo)準(zhǔn)性,,因此仍不能跨域?qū)嵤_@就需要一個(gè)能跨域傳遞符合通用標(biāo)準(zhǔn)的安全令牌的單點(diǎn)登錄機(jī)制,,讓所有的安全組件在分布式異構(gòu)環(huán)境中聯(lián)合工作,。當(dāng)前與單點(diǎn)登錄的相關(guān)Web服務(wù)安全規(guī)范是安全性斷言標(biāo)記語(yǔ)言SAML(Security Assertion Markup Language)[3]。作為XML的一個(gè)子集,,SAML最主要的目的就是實(shí)現(xiàn)Web SSO,,它解決了Web服務(wù)安全體系中的身份認(rèn)證多次使用的問題。此外,,SAML并不定義任何新的認(rèn)證和授權(quán)機(jī)制或方法,,只定義用于不同域的服務(wù)間安全信息傳輸?shù)奈臋n結(jié)構(gòu)[4]。
2?典型的基于SAML的單點(diǎn)登錄模型的分析
典型的基于SAML的單點(diǎn)登錄模型有兩種,,即Pull模型和Push模型[5],。這兩種模型的框架都是由如下三個(gè)部分組成:
(1)主體:請(qǐng)求訪問某種資源的實(shí)體,可以是用戶或者程序,。
(2)源站點(diǎn):在本文中也稱作SAML權(quán)威機(jī)構(gòu)或者安全認(rèn)證機(jī)構(gòu),,負(fù)責(zé)驗(yàn)證主體身份的合法性,并向主體提供其所需的安全信息以作為憑證(本文中即為SAML令牌),。由于該站點(diǎn)是主體身份信息提供者,,所以稱為源站點(diǎn)。
(3)目標(biāo)站點(diǎn):受保護(hù)的網(wǎng)絡(luò)資源的持有者,,能向合法主體提供其所需資源,。
下面分別對(duì)Pull模型和Push模型進(jìn)行分析。
2.1?Pull模型
Pull模型是指目標(biāo)站點(diǎn)從源站點(diǎn)那里把身份驗(yàn)證聲明拉過來,,如圖1所示,,對(duì)該模型的登錄流程描述如下:
(1)主體登錄到源站點(diǎn)進(jìn)行身份認(rèn)證。
(2)若主體通過了認(rèn)證,則源站點(diǎn)返回包含用戶身份信息的SAML身份認(rèn)證令牌,。
(3)主體使用令牌向目標(biāo)站點(diǎn)請(qǐng)求使用受安全保護(hù)的資源,。
(4)目標(biāo)站點(diǎn)接收到用戶身份驗(yàn)證令牌后,持該令牌到源站點(diǎn)請(qǐng)求SAML身份驗(yàn)證聲明,。
(5)源站點(diǎn)返回SAML身份驗(yàn)證聲明,。
(6)目標(biāo)站點(diǎn)收到SAML身份驗(yàn)證聲明后,為主體提供資源,。
?
在Pull模型中,,身份驗(yàn)證令牌是由源站點(diǎn)產(chǎn)生和維護(hù),僅在主體被重定向到新的目標(biāo)站點(diǎn)時(shí),,該目標(biāo)站點(diǎn)才獲取該令牌,。
2.2? Push模型
Push模型是指目標(biāo)站點(diǎn)把授權(quán)令牌推給源站點(diǎn),如圖2所示,,對(duì)該模型的登錄流程描述如下:
(1)主體登錄到源站點(diǎn)進(jìn)行身份認(rèn)證,。
(2)若主體通過了認(rèn)證,則源站點(diǎn)向目標(biāo)站點(diǎn)請(qǐng)求SAML授權(quán)令牌,。
(3)目標(biāo)站點(diǎn)根據(jù)源站點(diǎn)提供的用戶信息為該用戶提供SAML授權(quán)令牌。
(4)源站點(diǎn)接收到目標(biāo)站點(diǎn)生成的SAML授權(quán)令牌后將其轉(zhuǎn)發(fā)給主體,。
(5)主體使用授權(quán)令牌向目標(biāo)站點(diǎn)請(qǐng)求受安全保護(hù)的資源,。
(6)目標(biāo)站點(diǎn)收到主體發(fā)送過來的SAML授權(quán)令牌后為主體提供資源。
在Push模型中,,目標(biāo)站點(diǎn)生成并維護(hù)授權(quán)令牌,,而源站點(diǎn)則將使用該令牌將主體重定向到目標(biāo)站點(diǎn)。
當(dāng)前基于SAML的單點(diǎn)登錄系統(tǒng)都是以上述兩種模型為基礎(chǔ)的,,具體采用哪種取決于應(yīng)用環(huán)境,。當(dāng)源站點(diǎn)鏈接有大量目標(biāo)站點(diǎn)時(shí),Push模型可能更適合,,因?yàn)檫@種情況下,,源站點(diǎn)就無(wú)需在目標(biāo)站點(diǎn)接受由其生成的令牌或與之相關(guān)的聲明之前維護(hù)這些令牌或聲明。但是當(dāng)目標(biāo)站點(diǎn)處理能力有限或者不宜保存用戶身份信息時(shí),,就應(yīng)該采用Pull模型,,讓維護(hù)令牌或聲明的工作由源站點(diǎn)來處理。
2.3? 典型SAML單點(diǎn)登錄模型的不足
通過對(duì)Pull模型和Push模型的分析和比較可以看出,,盡管在這兩種單點(diǎn)登錄模型中用戶也只進(jìn)行了一次身份認(rèn)證,,但每次申請(qǐng)新的服務(wù)時(shí),Pull模型都要目標(biāo)站點(diǎn)向源站點(diǎn)發(fā)出請(qǐng)求以使用戶令牌生效,,而Push模型都需要源站點(diǎn)向目標(biāo)站點(diǎn)發(fā)出請(qǐng)求以獲取用戶令牌,。這兩種模型的結(jié)構(gòu)是相似的,只是運(yùn)行流程有所不同。從上面的分析可以看出,,基于這兩種模型的單點(diǎn)登錄系統(tǒng)面臨如下三個(gè)問題:
(1)在用戶每次訪問一個(gè)新的目標(biāo)服務(wù)站點(diǎn)時(shí),,都需要在源站點(diǎn)與新的目標(biāo)站點(diǎn)之間交換安全信息,因此整個(gè)實(shí)現(xiàn)過程比較復(fù)雜,。此外,,當(dāng)某個(gè)時(shí)刻有很多用戶需要同時(shí)訪問多個(gè)服務(wù),則網(wǎng)絡(luò)中的數(shù)據(jù)流量會(huì)明顯增大,。
(2)由于源站點(diǎn)與目標(biāo)站點(diǎn)之間具有較強(qiáng)的依賴關(guān)系,,因此系統(tǒng)的靈活性不足。
(3)如果使用這兩種模型,,就需要在源站點(diǎn)或者目標(biāo)站點(diǎn)上維護(hù)用戶的令牌,,當(dāng)一個(gè)站點(diǎn)同時(shí)需要維護(hù)的用戶令牌過多,或者當(dāng)一個(gè)站點(diǎn)同時(shí)接收到過多的令牌請(qǐng)求時(shí),,可能會(huì)導(dǎo)致該站點(diǎn)發(fā)生服務(wù)阻塞,,這不僅會(huì)使安全服務(wù)得不到響應(yīng),甚至還有造成服務(wù)器崩潰的隱患,。因此,,上述兩種模式都不適用于大量用戶在相同時(shí)間調(diào)用很多服務(wù),并且源站點(diǎn)處理能力又很有限的場(chǎng)合,。
鑒于Pull模型和Push模型的不足,,就需要尋求一種新的基于SAML的單點(diǎn)登錄模型,以簡(jiǎn)化單點(diǎn)登錄系統(tǒng)的登錄過程,。本文在這兩種模型的基礎(chǔ)上進(jìn)行改進(jìn),,提出一種新的基于SAML的單點(diǎn)登錄模型。改進(jìn)的目標(biāo)是解決上述三點(diǎn)不足,,使得包含SAML聲明的令牌僅在主體與源站點(diǎn),、以及主體與目標(biāo)站點(diǎn)之間進(jìn)行傳遞,而源站點(diǎn)和目標(biāo)站點(diǎn)之間無(wú)需進(jìn)行安全信息的互傳,,并且使令牌的維護(hù)工作由代表主體的客戶端來完成,。
3? 基于SAML的單點(diǎn)登錄模型的改進(jìn)
對(duì)單點(diǎn)登錄模型進(jìn)行改進(jìn)的思想是:源站點(diǎn)采用SAML斷言作為會(huì)話令牌,令牌中包含的用戶身份和屬性信息通常由安全機(jī)構(gòu)進(jìn)行加密和數(shù)字簽名,,形成安全的SAML令牌,。這樣收到此令牌的目標(biāo)站點(diǎn)通過對(duì)簽名進(jìn)行驗(yàn)證就可以知道令牌發(fā)行者的身份,從而間接認(rèn)證了申請(qǐng)服務(wù)的主體的身份,。當(dāng)目標(biāo)站點(diǎn)解析該令牌之后便可看到主體身份和屬性信息,,然后根據(jù)這些信息做出對(duì)該用戶的訪問控制決策。在這種情況下,,如果主體需要向別的目標(biāo)站點(diǎn)申請(qǐng)新的網(wǎng)絡(luò)服務(wù),,它只需將已經(jīng)獲得的SAML權(quán)威機(jī)構(gòu)頒布給他的安全的SAML令牌出示給目標(biāo)站點(diǎn)即可,。改進(jìn)模型如圖3所示。
改進(jìn)的基于SAML的單點(diǎn)登錄模型消息交換和處理流程描述如下:
(1)主體將自己的登錄信息發(fā)送至源站點(diǎn)以請(qǐng)求身份認(rèn)證,。
(2)源站點(diǎn)的認(rèn)證模塊對(duì)用戶登錄信息進(jìn)行驗(yàn)證,,并為合法的用戶生成SAML斷言信息,然后使用源站點(diǎn)與目標(biāo)站點(diǎn)事先協(xié)商好的密鑰進(jìn)行加密和數(shù)字簽名,,形成了安全的SAML令牌,,最后將該令牌返回給主體。
(3)主體使用該令牌訪問目標(biāo)站點(diǎn),。
(4)目標(biāo)站點(diǎn)對(duì)該令牌進(jìn)行簽名驗(yàn)證,,以確認(rèn)令牌的頒布者就是源站點(diǎn),從而無(wú)需再與源站點(diǎn)進(jìn)行交互,,同時(shí)也間接驗(yàn)證了服務(wù)請(qǐng)求的發(fā)起者是合法的,。接著,目標(biāo)站點(diǎn)根據(jù)解密后所獲得的SAML斷言信息以決策是否以及如何為用戶提供相應(yīng)的服務(wù),。
4? 三種模型的比較與分析
與Pull模型和Push模型相比,,改進(jìn)后的單點(diǎn)登錄模型具備如下一些突出的優(yōu)點(diǎn):
(1)主體向源站點(diǎn)進(jìn)行請(qǐng)求驗(yàn)證時(shí),源站點(diǎn)無(wú)需向目標(biāo)站點(diǎn)請(qǐng)求授權(quán)決策,;主體訪問目標(biāo)站點(diǎn)時(shí),,眾多目標(biāo)站點(diǎn)無(wú)需頻繁地對(duì)源站點(diǎn)進(jìn)行安全性驗(yàn)證請(qǐng)求。為了證明改進(jìn)模型確實(shí)簡(jiǎn)化了單點(diǎn)登錄系統(tǒng)的復(fù)雜性,,本文對(duì)三種模型進(jìn)行了具體的性能分析,,通過表1對(duì)三種模型在四種不同應(yīng)用場(chǎng)景下源站點(diǎn)被訪問的次數(shù)進(jìn)行了統(tǒng)計(jì)。從表中可以看出,,無(wú)論主體和目標(biāo)站點(diǎn)的數(shù)量是多少,改進(jìn)模型源站點(diǎn)被訪問次數(shù)均少于另外兩種模型,,特別是當(dāng)每個(gè)主體需要訪問的目標(biāo)站點(diǎn)的數(shù)目m的取值很大時(shí),,應(yīng)用改進(jìn)模型能明顯減輕源站點(diǎn)的負(fù)載,同時(shí)也簡(jiǎn)化了單點(diǎn)登錄系統(tǒng)的運(yùn)行流程,,并降低了網(wǎng)絡(luò)中數(shù)據(jù)的流量,。
?
(2)從源站點(diǎn)發(fā)出的安全令牌能被所有源站點(diǎn)信任的目標(biāo)站點(diǎn)查看,無(wú)需在源站點(diǎn)和指定的目標(biāo)站點(diǎn)之間事先建立安全通道,,而只需事先協(xié)商好加密和數(shù)字簽名處理的密鑰,。這樣,這兩類站點(diǎn)間的獨(dú)立性就得到增強(qiáng),,提高了系統(tǒng)的靈活性和可配置性,。
(3)大量的用戶令牌由各個(gè)主體自己維護(hù),這就減輕源站點(diǎn)或目標(biāo)站點(diǎn)用于維護(hù)令牌的開銷,。
改進(jìn)的基于SAML的單點(diǎn)登錄模型具備了上述三點(diǎn)獨(dú)特的優(yōu)勢(shì),,說明了這樣的改進(jìn)確實(shí)能簡(jiǎn)化單點(diǎn)登錄的運(yùn)行流程,并提高單點(diǎn)登錄系統(tǒng)的效率和靈活性。改進(jìn)后的模型比上述兩種典型模型更適用于大量用戶同時(shí)訪問很多服務(wù),,并且源站點(diǎn)處理能力又很有限的場(chǎng)合,。
本文首先介紹了傳統(tǒng)單點(diǎn)登錄技術(shù)以及SAML規(guī)范,然后對(duì)兩種典型的基于SAML的單點(diǎn)登錄模型進(jìn)行了分析,,并指出了這兩種模型存在的缺陷,。在此基礎(chǔ)上提出了改進(jìn)型的SAML單點(diǎn)登錄模型,并通過對(duì)三種的比較,,驗(yàn)證了這樣的改進(jìn)確實(shí)能簡(jiǎn)化單點(diǎn)登錄的流程,,改進(jìn)的SSO模型能更好地應(yīng)用于Web服務(wù)中很多用戶同時(shí)跨域訪問多服務(wù)的應(yīng)用場(chǎng)景。
參考文獻(xiàn)
[1] FOSTER I,,KESSELMAN C,,NICK J M,et al.The Physiology of the Grid-:An Open Grid Services Architecture for Distributed Systems Integration.http://www.globus.org/research/papers/ogsa.pdf.
[2] IBM.com.Web Services的安全性.http://www.cit.fudan.edu.cn/webservices/0004/Course_pdf/chapter07.pdf.
[3] Martijn de Boer.Single sign on for web service.Apr 18,,2005.https://forums.sdn.sap.com/thread.jspa?threadID=35990&messageID=343047.
[4] OASIS Security Services(SAML) TC.http://www.oasis-open.org/committees/security.
[5] GALBRAITH B,,HANKISON W.Web服務(wù)安全性高級(jí)編程[M].吳旭超,王黎,,譯.北京:清華大學(xué)出版社,,2002.