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