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