澄清SAML的不實(shí)說(shuō)法和誤解
2009-3-23
大 |
中 |
小導(dǎo)讀:在本文中,F(xiàn)rank Cohen詳細(xì)說(shuō)明并澄清了有關(guān)SAML的很多不實(shí)說(shuō)法和誤解。
關(guān)鍵詞:
SAMLSAML規(guī)范服務(wù)單點(diǎn)登錄互操作性正在加載數(shù)據(jù)...
2003年初,OASIS小組批準(zhǔn)了安全性斷言標(biāo)記語(yǔ)言(Security Assertion Markup Language,SAML)規(guī)范。由于來(lái)自25家公司的55名專(zhuān)家參與了該規(guī)范的制定,因此人們會(huì)認(rèn)為SAML能做任何事情,并且能被很好地理解。但事實(shí)并非如此,軟件開(kāi)發(fā)社區(qū)存在著很多對(duì)SAML的誤解。在本文中,F(xiàn)rank Cohen詳細(xì)說(shuō)明并澄清了有關(guān)SAML的很多不實(shí)說(shuō)法和誤解。
作為一個(gè)新生事物,新的安全性斷言標(biāo)記語(yǔ)言(SAML)規(guī)范正在被人們拿來(lái)與現(xiàn)有的單點(diǎn)登錄技術(shù)、認(rèn)證服務(wù)和目錄服務(wù)進(jìn)行比較。SAML是第一個(gè)可能成為多個(gè)認(rèn)證協(xié)議的規(guī)范以利用Web基礎(chǔ)結(jié)構(gòu)(在這種Web基礎(chǔ)結(jié)構(gòu)中,XML數(shù)據(jù)在TCP/IP網(wǎng)絡(luò)上通過(guò)HTTP協(xié)議傳送)。
OASIS小組開(kāi)發(fā)SAML的目的是作為一種基于XML的框架,用于交換安全性信息。SAML與其它安全性方法的最大區(qū)別在于它以有關(guān)多個(gè)主體的斷言的形式來(lái)表述安全性。其它方法使用中央認(rèn)證中心來(lái)發(fā)放證書(shū),這些證書(shū)保證了網(wǎng)絡(luò)中從一點(diǎn)到另一點(diǎn)的安全通信。利用SAML,網(wǎng)絡(luò)中的任何點(diǎn)都可以斷言它知道用戶(hù)或數(shù)據(jù)塊的身份。然后由接收應(yīng)用程序作出決定,如果它信任該斷言,則接受該用戶(hù)或數(shù)據(jù)塊。任何符合SAML的軟件然后都可以斷言對(duì)用戶(hù)或數(shù)據(jù)的認(rèn)證。對(duì)于即將出現(xiàn)的業(yè)務(wù)工作流Web服務(wù)標(biāo)準(zhǔn)(在該標(biāo)準(zhǔn)中,安全的數(shù)據(jù)需要流經(jīng)幾個(gè)系統(tǒng)才能完成對(duì)事務(wù)的處理)而言,這很重要。
盡管SAML剛剛被批準(zhǔn)沒(méi)多久,但是卻有許多有關(guān)SAML的不實(shí)說(shuō)法和誤解要澄清。我認(rèn)為,如果您真正了解了當(dāng)今的某個(gè)新興標(biāo)準(zhǔn),那么它肯定已經(jīng)過(guò)時(shí)了。
本文討論了有關(guān)SAML的一些比較常見(jiàn)的不實(shí)說(shuō)法和誤解。
誤解:SAML是一個(gè)完整的身份管理解決方案。
SAML作為身份管理解決方案中服務(wù)器之間的通信協(xié)議發(fā)揮了重要作用;但是,SAML并不是完整的解決方案。在信息系統(tǒng)安全性領(lǐng)域,近來(lái)出現(xiàn)的 身份管理是一個(gè)新術(shù)語(yǔ),它涵蓋了下面這些計(jì)算領(lǐng)域:
·準(zhǔn)備(provisioning)—將新用戶(hù)添加到企業(yè)內(nèi)部信息系統(tǒng)和外部合作伙伴信息系統(tǒng)的網(wǎng)絡(luò)操作系統(tǒng)目錄和應(yīng)用程序服務(wù)器目錄中。
·密碼管理—使用戶(hù)能夠用一組憑證登錄到公司的信息系統(tǒng)。此外,使用戶(hù)能夠自己管理其密碼、用戶(hù)帳戶(hù)數(shù)據(jù)和特權(quán)。
·訪問(wèn)控制—使系統(tǒng)能夠識(shí)別用戶(hù)組的安全性策略。例如,某項(xiàng)安全性策略防止某個(gè)人更改他或她的職位,但能將職位更改請(qǐng)求發(fā)送給具有相應(yīng)權(quán)限的人。
SAML是兩臺(tái)服務(wù)器需要共享認(rèn)證信息時(shí)使用的協(xié)議規(guī)范。SAML規(guī)范中沒(méi)有任何內(nèi)容提供了實(shí)際的認(rèn)證服務(wù),認(rèn)證服務(wù)是由商業(yè)目錄服務(wù)器提供的。
不實(shí)說(shuō)法:企業(yè)之間的Web單點(diǎn)登錄很好理解并且易于實(shí)現(xiàn)。
SAML是旨在減少構(gòu)建和操作信息系統(tǒng)(這些系統(tǒng)在許多服務(wù)提供者之間相互操作)所花費(fèi)成本的眾多嘗試之一。在當(dāng)今競(jìng)爭(zhēng)激烈且迅速發(fā)展的環(huán)境中,出現(xiàn)了通過(guò)瀏覽器和支持Web的應(yīng)用程序?yàn)橛脩?hù)提供互操作性的企業(yè)聯(lián)合。例如,旅游網(wǎng)站允許用戶(hù)不必進(jìn)行多次登錄即可預(yù)訂機(jī)票和租車(chē)。今天,一大群軟件開(kāi)發(fā)人員、QA技術(shù)人員和IT經(jīng)理都需要處理復(fù)雜的和不可靠的后端系統(tǒng),這些系統(tǒng)提供了企業(yè)之間的聯(lián)合安全性。
在典型的支持Web的基礎(chǔ)結(jié)構(gòu)中,運(yùn)行業(yè)界領(lǐng)先的企業(yè)系統(tǒng)的軟件需要處理權(quán)限服務(wù)器之間的瀏覽器重定向、服務(wù)器域之間的HTTP post命令、公鑰基礎(chǔ)結(jié)構(gòu)(public key infrastructure,PKI)加密和數(shù)字證書(shū),以及聲明任何給定用戶(hù)或組的信任級(jí)別的相互同意(mutually agreed-upon)機(jī)制。SAML向軟件開(kāi)發(fā)人員展示了如何表示用戶(hù)、標(biāo)識(shí)所需傳送的數(shù)據(jù),并且定義了發(fā)送和接收權(quán)限數(shù)據(jù)的過(guò)程。
不實(shí)說(shuō)法:SAML是一個(gè)復(fù)雜的設(shè)計(jì)。
SAML為那些需要在Web基礎(chǔ)結(jié)構(gòu)(XML/HTTP/TCP)上設(shè)計(jì)和構(gòu)建可伸縮聯(lián)合系統(tǒng)的系統(tǒng)架構(gòu)設(shè)計(jì)師提供了一個(gè)藍(lán)圖。即使您決定不使用SAML,但SAML規(guī)范還是回答了許多設(shè)計(jì)問(wèn)題,這些問(wèn)題是任何系統(tǒng)架構(gòu)設(shè)計(jì)師在構(gòu)建可互操作的且支持Web的系統(tǒng)時(shí)必須回答的。
作為一個(gè)示例,請(qǐng)考慮用來(lái)將權(quán)限請(qǐng)求編碼成XML請(qǐng)求的SAML斷言機(jī)制。SAML定義了六類(lèi)語(yǔ)句:
認(rèn)證(Authentication):主體已登錄。例如,用于認(rèn)證的SAML斷言看起來(lái)可能象下面這樣:
fcohen@pushtotest.com logged in at 2003-02-06T19:22:09Z
屬性(Attribute):標(biāo)識(shí)主體的特性。例如,fcohen@pushtotest.com擁有Admin角色。
權(quán)限決定(Authorization decision):聲明允許某個(gè)主體對(duì)某個(gè)資源執(zhí)行操作。例如,fcohen@pushtotest.com被授權(quán)GET http://www.pushtotest.com/ptt/kits/index.html。
斷言屬性(Assertion attribute):一個(gè)可選機(jī)制,使行業(yè)團(tuán)體能夠定義特定于其行業(yè)的屬性。
此外,SAML定義了由某個(gè)斷言中的語(yǔ)句共享的斷言的屬性,包括:
版本屬性(Version attribute):標(biāo)識(shí)了斷言所遵循的SAML規(guī)范的主版本和次版本。
SAML還定義了可選的條件元素以限制權(quán)限請(qǐng)求的有效性。例如,如果SAML標(biāo)記NotBefore或NotOnOrAfter指定的以UTC編碼的日期,那么它可能是有效的。
最后,SAML定義了一個(gè)XML簽名(XML Signature)元素以標(biāo)識(shí)認(rèn)證中心。該元素可以包含一個(gè)帶有公鑰、到期日和使用策略的X509證書(shū)。XML簽名還包含簽名值本身,簽名值是由認(rèn)證中心為元素內(nèi)容生成的。可以使用X509證書(shū)中權(quán)威機(jī)構(gòu)的公鑰信息來(lái)驗(yàn)證簽名。通常,SAML的復(fù)雜性在于部署基于SAML的軟件,以及設(shè)置公鑰基礎(chǔ)結(jié)構(gòu)(PKI)環(huán)境和數(shù)字證書(shū)。
誤解:SAML為大多數(shù)行業(yè)預(yù)定義了所有屬性含義。
SAML并未為任何行業(yè)定義屬性含義。而是定義了一個(gè)名稱(chēng)空間機(jī)制,行業(yè)團(tuán)體可以使用該名稱(chēng)空間機(jī)制來(lái)為其特定行業(yè)定義屬性。例如,在航空行業(yè)中,SAML屬性role:mechanic定義了飛機(jī)的機(jī)械師。系統(tǒng)兩端的各方需要分別就SAML使用的名稱(chēng)空間達(dá)成一致。
SAML規(guī)范標(biāo)識(shí)自己的名稱(chēng)空間來(lái)限定SAML屬性和元素。例如,名稱(chēng)空間"urn:oasis:names:tc:SAML:1.0:action:ghpp"定義了SAML操作中使用的get/head/put/post http操作。如果該SAML名稱(chēng)空間的格式看起來(lái)有點(diǎn)古怪,那么這可能是因?yàn)镾AML名稱(chēng)空間未遵循SOAP和XML-RPC中的傳統(tǒng)XML名稱(chēng)空間格式:XML名稱(chēng)空間是URI;SAML使用URI的URN變體,而其它名稱(chēng)空間則使用URL變體。
不實(shí)說(shuō)法:SAML是一個(gè)認(rèn)證權(quán)威機(jī)構(gòu)。
SAML是一個(gè)在服務(wù)器之間使用的認(rèn)證協(xié)議。您仍然需要能幫助您實(shí)際登錄的某些東西。SAML所能說(shuō)的只是“您已經(jīng)登錄了(you have logged in)”。例如,當(dāng)LDAP服務(wù)器對(duì)一個(gè)用戶(hù)進(jìn)行認(rèn)證時(shí),認(rèn)證權(quán)威機(jī)構(gòu)是LDAP服務(wù)器 — 即使LDAP服務(wù)器可能正在使用SAML來(lái)傳送認(rèn)證。
在完整的認(rèn)證系統(tǒng)中,您仍需要編寫(xiě)策略決策點(diǎn),以確定用戶(hù)是否可以訪問(wèn)Web頁(yè)面。此外,您還需要編寫(xiě)策略強(qiáng)制實(shí)施點(diǎn)(enforcement point)。這是一個(gè)接收權(quán)限、檢查角色和權(quán)限,然后做出斷言的servlet或應(yīng)用程序。有幾家公司提供了商業(yè)策略決策點(diǎn)和策略強(qiáng)制實(shí)施點(diǎn)解決方案,這些公司包括Oblix、Netegrity、IBM和許多其它公司。
誤解:在認(rèn)證需要傳輸大量數(shù)據(jù)的Web環(huán)境中,SAML不能很好地工作。
當(dāng)權(quán)限請(qǐng)求對(duì)于HTTP重定向而言太長(zhǎng)時(shí),SAML定義了一種助診文件(artifact)機(jī)制。SAML助診文件的長(zhǎng)度為42字節(jié),它包含一個(gè)類(lèi)型-代碼 — 長(zhǎng)度為20個(gè)字節(jié)的源標(biāo)識(shí),以及長(zhǎng)度為20個(gè)字節(jié)的隨機(jī)數(shù),服務(wù)器用它來(lái)查找斷言。源服務(wù)臨時(shí)存儲(chǔ)斷言。目標(biāo)站點(diǎn)接收斷言,然后從源站點(diǎn)上的助診文件直接抽出所需的數(shù)據(jù)。這允許兩臺(tái)不同的安全性服務(wù)器使用助診文件。
不實(shí)說(shuō)法:使用重播技術(shù)可以輕易地攻破SAML。
重播攻擊是這樣一類(lèi)攻擊:它可以攔截有效的消息,然后再將該消息重播回服務(wù)。重播攻擊可用于造成數(shù)據(jù)完整性問(wèn)題以及拒絕服務(wù)攻擊。
SAML提供了避免重播攻擊的保護(hù)。SAML要求在傳輸斷言和消息時(shí)使用SSL加密,以專(zhuān)門(mén)防止斷言被攔截。此外,SAML提供了數(shù)字簽名機(jī)制,該機(jī)制使斷言具有有效時(shí)間范圍,以防止斷言以后被重播。
最后,助診文件概要具有其它兩個(gè)重播對(duì)策:
·SAML源站點(diǎn)只將斷言返回給接收助診文件的請(qǐng)求者。
·SAML源站點(diǎn)在第一次使用助診文件后會(huì)擦除其助診文件到斷言的映射,從而使得重播的助診文件無(wú)效。
誤解:SAML定義了發(fā)現(xiàn)過(guò)程以查找認(rèn)證權(quán)威機(jī)構(gòu)。
SAML未定義任何機(jī)制來(lái)查找接受SAML斷言的目標(biāo)站點(diǎn)。
SAML定義了一種用于認(rèn)證的推(push)機(jī)制:用戶(hù)登錄到源站點(diǎn),然后該站點(diǎn)向目標(biāo)站點(diǎn)發(fā)送一個(gè)斷言。該過(guò)程需要源站點(diǎn)和目標(biāo)站點(diǎn)之間進(jìn)行數(shù)字簽名。在Web環(huán)境中,瀏覽器將表單公布(post)到目標(biāo)站點(diǎn),并且在一個(gè)隱藏的表單變量中包含一個(gè)用Base64編碼的簽名和斷言。
將來(lái)的SAML規(guī)范有可能包含發(fā)現(xiàn)機(jī)制。
不實(shí)說(shuō)法:SAML不能處理匿名或訪客(guest)訪問(wèn)。
SAML沒(méi)有用于提供匿名認(rèn)證的功能。請(qǐng)考慮這樣一種方案,其中某個(gè)網(wǎng)站允許您使用合作伙伴網(wǎng)站的功能,但是不允許合作伙伴站點(diǎn)知道您是誰(shuí)。SAML未提供這樣的功能。讓SAML處理匿名或訪客訪問(wèn)是可能的,但是這要求參與的企業(yè)就其自己的匿名訪問(wèn)或訪客授權(quán)訪問(wèn)的約定達(dá)成一致。
不實(shí)說(shuō)法:SAML要求在客戶(hù)機(jī)端和服務(wù)器端都有SSL證書(shū)。
SAML構(gòu)建在需要公鑰基礎(chǔ)結(jié)構(gòu)(PKI)的基礎(chǔ)之上,以提供數(shù)字簽名和SAML斷言的加密。所以,PKI具有的不便SAML全都有。
SAML是最先需要那種程度的細(xì)粒度安全性的協(xié)議中的一個(gè);例如,XML密鑰管理規(guī)范(XML Key Management Specification,XKMS)提供的安全性將用于認(rèn)證SAML斷言。同時(shí),通過(guò)要求使用HTTP Basic的HTTP客戶(hù)機(jī)端認(rèn)證或SSL客戶(hù)機(jī)端證書(shū)認(rèn)證,SAML為SAML助診文件提供了安全性。然后只將助診文件發(fā)送給期望的請(qǐng)求者,在檢索到助診文件后則刪除它。
誤解:SAML是霧件(vaporware,指已宣布但還未實(shí)現(xiàn));還沒(méi)有人要實(shí)現(xiàn)它。
許多商業(yè)和開(kāi)放源碼產(chǎn)品中已經(jīng)提供了SAML,包括:
·IBM Tivoli Access Manager
·Oblix NetPoint
·SunONE Identity Server
·Baltimore, SelectAccess
·Entegrity Solutions AssureAccess
·Internet2 OpenSAML
·Netegrity SiteMinder
·Sigaba Secure Messaging Solutions
·RSA Security ClearTrust
·VeriSign Trust Integration Toolkit
·Entrust GetAccess 7
誤解:Microsoft不支持SAML。
目前還不清楚Microsoft將如何支持SAML,但是Microsoft和OASIS小組正在進(jìn)行大量工作,以使得SAML與Microsoft的倡議相協(xié)調(diào)。Microsoft的平臺(tái)和服務(wù)(包括Microsoft .NET Passport)將如何與那些實(shí)現(xiàn)Liberty Alliance和OASIS WS-Security項(xiàng)目協(xié)議的服務(wù)相互操作,還需拭目以待。例如,與Passport的專(zhuān)有系統(tǒng)不同,Liberty Alliance認(rèn)證規(guī)范使用SAML標(biāo)記來(lái)交換認(rèn)證標(biāo)記。但是,這兩種認(rèn)證系統(tǒng)在將標(biāo)記從一個(gè)站點(diǎn)傳遞到下一個(gè)站點(diǎn)的方式上有所不同。
Microsoft已公開(kāi)承諾使WS-Security路線圖工作和SAML項(xiàng)目合理化。他們似乎更側(cè)重于以WS-Security作為更通用的Web服務(wù)安全性模型,該模型可以使用現(xiàn)有的IT投資以及新興標(biāo)準(zhǔn)(如SAML和XrML)。Microsoft正在與OASIS WS-Security小組通力合作,以使用SAML斷言作為WS-Security憑證。最近,OASIS WS-Security小組接受了SAML的WS-Security綁定。
盡管Microsoft對(duì)OASIS WS-Security小組無(wú)控制力,但Chris Kaler是該工作組的主席之一,同時(shí)也是Microsoft員工。我認(rèn)為,如果Microsoft對(duì)于將SAML用于Passport和Liberty Alliance只想得到形式上的認(rèn)可,那么Microsoft還不如向ECMA標(biāo)準(zhǔn)團(tuán)體提供建議。
誤解:XML簽名中的規(guī)范化是不需要的。
這完全錯(cuò)了。
XML簽名是一種規(guī)范,旨在滿(mǎn)足將XML文檔(包括SAML)與數(shù)字簽名一起使用的特殊需求。W3C的XML簽名工作組正在開(kāi)發(fā)一種XML語(yǔ)法,以便于可以對(duì)幾乎任何內(nèi)容進(jìn)行簽名 —XML文檔、SOAP消息頭和XML元素,并且提供用于創(chuàng)建和驗(yàn)證數(shù)字簽名的協(xié)議和過(guò)程。
XML簽名中的規(guī)范化是允許在多個(gè)服務(wù)之間進(jìn)行認(rèn)證所必需的。例如,請(qǐng)考慮當(dāng)您通過(guò)瀏覽器界面從制造商那里購(gòu)買(mǎi)個(gè)人計(jì)算機(jī)時(shí),服務(wù)器端所發(fā)生的情形。多個(gè)服務(wù)處理訂單的不同部分:一個(gè)服務(wù)提供搜索功能以找到您希望訂購(gòu)的產(chǎn)品;下一個(gè)是開(kāi)帳單服務(wù),它獲取您的支付信息;最后一個(gè)服務(wù)獲取裝運(yùn)信息。這三個(gè)系統(tǒng)使用SAML斷言共享您的記錄。規(guī)范化確保了您記錄中的字節(jié)順序保持相同,即使三個(gè)不同系統(tǒng)正在操作該記錄也是如此。如果沒(méi)有規(guī)范化,那么該記錄就可能會(huì)發(fā)生變化并使XML簽名無(wú)效,因?yàn)閄ML簽名的任務(wù)是確保其簽名的內(nèi)容是完好無(wú)損的,并且字節(jié)順序是相同的。
結(jié)束語(yǔ)
由于許多致力于安全性的公司已經(jīng)提供了上市的產(chǎn)品,因而SAML有一個(gè)良好的起點(diǎn)。SAML規(guī)范為在一組聯(lián)合服務(wù)中設(shè)計(jì)支持Web的、單點(diǎn)登錄的服務(wù)提供了良好的框架。SAML規(guī)范工作組的工作還在繼續(xù),以使得SAML和其它新興標(biāo)準(zhǔn)(包括WS-Security)之間的互操作性需求合理化。
作者感謝Charles Knouse(Oblix的首席軟件工程師)和軟件開(kāi)發(fā)論壇(Software Development Forum,www.sdforum.org)的Web服務(wù)特別興趣組(Web Services Special Interest Group),感謝他們?yōu)檠芯勘疚乃峁┑膸椭?div style="height:15px;">
Frank Cohen是一位“上門(mén)服務(wù)”人士,當(dāng)企業(yè)需要測(cè)試和解決復(fù)雜的互操作信息系統(tǒng)(特別是Web服務(wù))中的問(wèn)題時(shí),他可以上門(mén)服務(wù)。Frank是PushToTest(一家測(cè)試自動(dòng)化解決方案公司)的創(chuàng)始人和幾本有關(guān)測(cè)試信息系統(tǒng)的書(shū)籍的作者。Frank最近出版的新書(shū)Automating Web Tests with TestMaker現(xiàn)在可在http://www.pushtotest.com/ptt找到??梢酝ㄟ^(guò)fcohen@pushtotest.com與他聯(lián)系。