kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
          了解安全性斷言標(biāo)記語言

          級別: 中級

          http://www-128.ibm.com/developerworks/cn/xml/x-samlmyth/

          Frank Cohen

          創(chuàng)始人, PushToTest
          2003 年 10 月

          2003 年初,OASIS 小組批準(zhǔn)了安全性斷言標(biāo)記語言(Security Assertion Markup Language,SAML)規(guī)范。由于來自 25 家公司的 55 名專家參與了該規(guī)范的制定,因此人們會認(rèn)為 SAML 能做任何事情,并且能被很好地理解。但事實(shí)并非如此,軟件開發(fā)社區(qū)存在著很多對 SAML 的誤解。在本文中,F(xiàn)rank Cohen 詳細(xì)說明并澄清了有關(guān) SAML 的很多不實(shí)說法和誤解。

          作為一個新生事物,新的安全性斷言標(biāo)記語言(SAML)規(guī)范正在被人們拿來與現(xiàn)有的單點(diǎn)登錄技術(shù)、認(rèn)證服務(wù)和目錄服務(wù)進(jìn)行比較。SAML 是第一個可能成為多個認(rèn)證協(xié)議的規(guī)范以利用 Web 基礎(chǔ)結(jié)構(gòu)(在這種 Web 基礎(chǔ)結(jié)構(gòu)中,XML 數(shù)據(jù)在 TCP/IP 網(wǎng)絡(luò)上通過 HTTP 協(xié)議傳送)。

          OASIS 小組開發(fā) SAML 的目的是作為一種基于 XML 的框架,用于交換安全性信息。SAML 與其它安全性方法的最大區(qū)別在于它以有關(guān)多個主體的斷言的形式來表述安全性。其它方法使用中央認(rèn)證中心來發(fā)放證書,這些證書保證了網(wǎng)絡(luò)中從一點(diǎn)到另一點(diǎn)的安全通信。利用 SAML,網(wǎng)絡(luò)中的任何點(diǎn)都可以斷言它知道用戶或數(shù)據(jù)塊的身份。然后由接收應(yīng)用程序作出決定,如果它信任該斷言,則接受該用戶或數(shù)據(jù)塊。任何符合 SAML 的軟件然后都可以斷言對用戶或數(shù)據(jù)的認(rèn)證。對于即將出現(xiàn)的業(yè)務(wù)工作流 Web 服務(wù)標(biāo)準(zhǔn)(在該標(biāo)準(zhǔn)中,安全的數(shù)據(jù)需要流經(jīng)幾個系統(tǒng)才能完成對事務(wù)的處理)而言,這很重要。

          盡管 SAML 剛剛被批準(zhǔn)沒多久,但是卻有許多有關(guān) SAML 的不實(shí)說法和誤解要澄清。我認(rèn)為,如果您真正了解了當(dāng)今的某個新興標(biāo)準(zhǔn),那么它肯定已經(jīng)過時了。

          本文討論了有關(guān) SAML 的一些比較常見的不實(shí)說法和誤解。

          誤解:SAML 是一個完整的身份管理解決方案。
          SAML 作為身份管理解決方案中服務(wù)器之間的通信協(xié)議發(fā)揮了重要作用;但是,SAML 并不是完整的解決方案。在信息系統(tǒng)安全性領(lǐng)域,近來出現(xiàn)的 身份管理是一個新術(shù)語,它涵蓋了下面這些計(jì)算領(lǐng)域:

          • 準(zhǔn)備(provisioning)— 將新用戶添加到企業(yè)內(nèi)部信息系統(tǒng)和外部合作伙伴信息系統(tǒng)的網(wǎng)絡(luò)操作系統(tǒng)目錄和應(yīng)用程序服務(wù)器目錄中。
          • 密碼管理— 使用戶能夠用一組憑證登錄到公司的信息系統(tǒng)。此外,使用戶能夠自己管理其密碼、用戶帳戶數(shù)據(jù)和特權(quán)。
          • 訪問控制— 使系統(tǒng)能夠識別用戶組的安全性策略。例如,某項(xiàng)安全性策略防止某個人更改他或她的職位,但能將職位更改請求發(fā)送給具有相應(yīng)權(quán)限的人。

          SAML 是兩臺服務(wù)器需要共享認(rèn)證信息時使用的協(xié)議規(guī)范。SAML 規(guī)范中沒有任何內(nèi)容提供了實(shí)際的認(rèn)證服務(wù),認(rèn)證服務(wù)是由商業(yè)目錄服務(wù)器提供的。

          不實(shí)說法:企業(yè)之間的 Web 單點(diǎn)登錄很好理解并且易于實(shí)現(xiàn)。
          SAML 是旨在減少構(gòu)建和操作信息系統(tǒng)(這些系統(tǒng)在許多服務(wù)提供者之間相互操作)所花費(fèi)成本的眾多嘗試之一。在當(dāng)今競爭激烈且迅速發(fā)展的環(huán)境中,出現(xiàn)了通過瀏覽器和支持 Web 的應(yīng)用程序?yàn)橛脩籼峁┗ゲ僮餍缘钠髽I(yè)聯(lián)合。例如,旅游網(wǎng)站允許用戶不必進(jìn)行多次登錄即可預(yù)訂機(jī)票和租車。今天,一大群軟件開發(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ù)字證書,以及聲明任何給定用戶或組的信任級別的相互同意(mutually agreed-upon)機(jī)制。SAML 向軟件開發(fā)人員展示了如何表示用戶、標(biāo)識所需傳送的數(shù)據(jù),并且定義了發(fā)送和接收權(quán)限數(shù)據(jù)的過程。

          不實(shí)說法:SAML 是一個復(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ì)師提供了一個藍(lán)圖。即使您決定不使用 SAML,但 SAML 規(guī)范還是回答了許多設(shè)計(jì)問題,這些問題是任何系統(tǒng)架構(gòu)設(shè)計(jì)師在構(gòu)建可互操作的且支持 Web 的系統(tǒng)時必須回答的。

          作為一個示例,請考慮用來將權(quán)限請求編碼成 XML 請求的 SAML 斷言機(jī)制。SAML 定義了六類語句:

          認(rèn)證(Authentication):主體已登錄。例如,用于認(rèn)證的 SAML 斷言看起來可能象下面這樣:

          
          fcohen@pushtotest.com logged in at 2003-02-06T19:22:09Z
          

          屬性(Attribute):標(biāo)識主體的特性。例如,fcohen@pushtotest.com 擁有 Admin 角色。

          權(quán)限決定(Authorization decision):聲明允許某個主體對某個資源執(zhí)行操作。例如,fcohen@pushtotest.com 被授權(quán) GET http://www.pushtotest.com/ptt/kits/index.html。

          斷言屬性(Assertion attribute):一個可選機(jī)制,使行業(yè)團(tuán)體能夠定義特定于其行業(yè)的屬性。

          此外,SAML 定義了由某個斷言中的語句共享的斷言的屬性,包括:

          版本屬性(Version attribute):標(biāo)識了斷言所遵循的 SAML 規(guī)范的主版本和次版本。

          SAML 還定義了可選的 條件元素以限制權(quán)限請求的有效性。例如,如果 SAML 標(biāo)記 NotBeforeNotOnOrAfter 指定的以 UTC 編碼的日期,那么它可能是有效的。

          最后,SAML 定義了一個 XML 簽名(XML Signature)元素以標(biāo)識認(rèn)證中心。該元素可以包含一個帶有公鑰、到期日和使用策略的 X509 證書。XML 簽名還包含簽名值本身,簽名值是由認(rèn)證中心為元素內(nèi)容生成的。可以使用 X509 證書中權(quán)威機(jī)構(gòu)的公鑰信息來驗(yàn)證簽名。通常,SAML 的復(fù)雜性在于部署基于 SAML 的軟件,以及設(shè)置公鑰基礎(chǔ)結(jié)構(gòu)(PKI)環(huán)境和數(shù)字證書。

          誤解:SAML 為大多數(shù)行業(yè)預(yù)定義了所有屬性含義。
          SAML 并未為任何行業(yè)定義屬性含義。而是定義了一個名稱空間機(jī)制,行業(yè)團(tuán)體可以使用該名稱空間機(jī)制來為其特定行業(yè)定義屬性。例如,在航空行業(yè)中,SAML 屬性 role:mechanic 定義了飛機(jī)的機(jī)械師。系統(tǒng)兩端的各方需要分別就 SAML 使用的名稱空間達(dá)成一致。

          SAML 規(guī)范標(biāo)識自己的名稱空間來限定 SAML 屬性和元素。例如,名稱空間 "urn:oasis:names:tc:SAML:1.0:action:ghpp" 定義了 SAML 操作中使用的 get/head/put/post http 操作。如果該 SAML 名稱空間的格式看起來有點(diǎn)古怪,那么這可能是因?yàn)?SAML 名稱空間未遵循 SOAP 和 XML-RPC 中的傳統(tǒng) XML 名稱空間格式:XML 名稱空間是 URI;SAML 使用 URI 的 URN 變體,而其它名稱空間則使用 URL 變體。

          不實(shí)說法:SAML 是一個認(rèn)證權(quán)威機(jī)構(gòu)。
          SAML 是一個在服務(wù)器之間使用的認(rèn)證 協(xié)議。您仍然需要能幫助您實(shí)際登錄的某些東西。SAML 所能說的只是“您已經(jīng)登錄了(you have logged in)”。例如,當(dāng) LDAP 服務(wù)器對一個用戶進(jìn)行認(rèn)證時,認(rèn)證權(quán)威機(jī)構(gòu)是 LDAP 服務(wù)器 — 即使 LDAP 服務(wù)器可能正在使用 SAML 來傳送認(rèn)證。

          在完整的認(rèn)證系統(tǒng)中,您仍需要編寫策略決策點(diǎn),以確定用戶是否可以訪問 Web 頁面。此外,您還需要編寫策略強(qiáng)制實(shí)施點(diǎn)(enforcement point)。這是一個接收權(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)限請求對于 HTTP 重定向而言太長時,SAML 定義了一種 助診文件(artifact)機(jī)制。SAML 助診文件的長度為 42 字節(jié),它包含一個類型-代碼 — 長度為 20 個字節(jié)的源標(biāo)識,以及長度為 20 個字節(jié)的隨機(jī)數(shù),服務(wù)器用它來查找斷言。源服務(wù)臨時存儲斷言。目標(biāo)站點(diǎn)接收斷言,然后從源站點(diǎn)上的助診文件直接抽出所需的數(shù)據(jù)。這允許兩臺不同的安全性服務(wù)器使用助診文件。

          不實(shí)說法:使用重播技術(shù)可以輕易地攻破 SAML。
          重播攻擊是這樣一類攻擊:它可以攔截有效的消息,然后再將該消息重播回服務(wù)。重播攻擊可用于造成數(shù)據(jù)完整性問題以及拒絕服務(wù)攻擊。

          SAML 提供了避免重播攻擊的保護(hù)。SAML 要求在傳輸斷言和消息時使用 SSL 加密,以專門防止斷言被攔截。此外,SAML 提供了數(shù)字簽名機(jī)制,該機(jī)制使斷言具有有效時間范圍,以防止斷言以后被重播。

          最后,助診文件概要具有其它兩個重播對策:

          • SAML 源站點(diǎn)只將斷言返回給接收助診文件的請求者。
          • SAML 源站點(diǎn)在第一次使用助診文件后會擦除其助診文件到斷言的映射,從而使得重播的助診文件無效。

          誤解:SAML 定義了發(fā)現(xiàn)過程以查找認(rèn)證權(quán)威機(jī)構(gòu)。
          SAML 未定義任何機(jī)制來查找接受 SAML 斷言的目標(biāo)站點(diǎn)。

          SAML 定義了一種用于認(rèn)證的 推(push)機(jī)制:用戶登錄到源站點(diǎn),然后該站點(diǎn)向目標(biāo)站點(diǎn)發(fā)送一個斷言。該過程需要源站點(diǎn)和目標(biāo)站點(diǎn)之間進(jìn)行數(shù)字簽名。在 Web 環(huán)境中,瀏覽器將表單公布(post)到目標(biāo)站點(diǎn),并且在一個隱藏的表單變量中包含一個用 Base64 編碼的簽名和斷言。

          將來的 SAML 規(guī)范有可能包含發(fā)現(xiàn)機(jī)制。

          不實(shí)說法:SAML 不能處理匿名或訪客(guest)訪問。
          SAML 沒有用于提供匿名認(rèn)證的功能。請考慮這樣一種方案,其中某個網(wǎng)站允許您使用合作伙伴網(wǎng)站的功能,但是不允許合作伙伴站點(diǎn)知道您是誰。SAML 未提供這樣的功能。讓 SAML 處理匿名或訪客訪問是可能的,但是這要求參與的企業(yè)就其自己的匿名訪問或訪客授權(quán)訪問的約定達(dá)成一致。

          不實(shí)說法:SAML 要求在客戶機(jī)端和服務(wù)器端都有 SSL 證書。
          SAML 構(gòu)建在需要公鑰基礎(chǔ)結(jié)構(gòu)(PKI)的基礎(chǔ)之上,以提供數(shù)字簽名和 SAML 斷言的加密。所以,PKI 具有的不便 SAML 全都有。

          SAML 是最先需要那種程度的細(xì)粒度安全性的協(xié)議中的一個;例如,XML 密鑰管理規(guī)范(XML Key Management Specification,XKMS)提供的安全性將用于認(rèn)證 SAML 斷言。同時,通過要求使用 HTTP Basic 的 HTTP 客戶機(jī)端認(rèn)證或 SSL 客戶機(jī)端證書認(rèn)證,SAML 為 SAML 助診文件提供了安全性。然后只將助診文件發(fā)送給期望的請求者,在檢索到助診文件后則刪除它。

          誤解:SAML 是霧件(vaporware,指已宣布但還未實(shí)現(xiàn));還沒有人要實(shí)現(xiàn)它。
          許多商業(yè)和開放源碼產(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 的平臺和服務(wù)(包括 Microsoft .NET Passport)將如何與那些實(shí)現(xiàn) Liberty Alliance 和 OASIS WS-Security 項(xiàng)目協(xié)議的服務(wù)相互操作,還需拭目以待。例如,與 Passport 的專有系統(tǒng)不同,Liberty Alliance 認(rèn)證規(guī)范使用 SAML 標(biāo)記來交換認(rèn)證標(biāo)記。但是,這兩種認(rèn)證系統(tǒng)在將標(biāo)記從一個站點(diǎn)傳遞到下一個站點(diǎn)的方式上有所不同。

          Microsoft 已公開承諾使 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 對 OASIS WS-Security 小組無控制力,但 Chris Kaler 是該工作組的主席之一,同時也是 Microsoft 員工。我認(rèn)為,如果 Microsoft 對于將 SAML 用于 Passport 和 Liberty Alliance 只想得到形式上的認(rèn)可,那么 Microsoft 還不如向 ECMA 標(biāo)準(zhǔn)團(tuán)體提供建議。

          誤解:XML 簽名中的規(guī)范化是不需要的。
          這完全錯了。

          XML 簽名是一種規(guī)范,旨在滿足將 XML 文檔(包括 SAML)與數(shù)字簽名一起使用的特殊需求。W3C 的 XML 簽名工作組正在開發(fā)一種 XML 語法,以便于可以對幾乎任何內(nèi)容進(jìn)行簽名 — XML 文檔、SOAP 消息頭和 XML 元素,并且提供用于創(chuàng)建和驗(yàn)證數(shù)字簽名的協(xié)議和過程。

          XML 簽名中的規(guī)范化是允許在多個服務(wù)之間進(jìn)行認(rèn)證所必需的。例如,請考慮當(dāng)您通過瀏覽器界面從制造商那里購買個人計(jì)算機(jī)時,服務(wù)器端所發(fā)生的情形。多個服務(wù)處理訂單的不同部分:一個服務(wù)提供搜索功能以找到您希望訂購的產(chǎn)品;下一個是開帳單服務(wù),它獲取您的支付信息;最后一個服務(wù)獲取裝運(yùn)信息。這三個系統(tǒng)使用 SAML 斷言共享您的記錄。規(guī)范化確保了您記錄中的字節(jié)順序保持相同,即使三個不同系統(tǒng)正在操作該記錄也是如此。如果沒有規(guī)范化,那么該記錄就可能會發(fā)生變化并使 XML 簽名無效,因?yàn)?XML 簽名的任務(wù)是確保其簽名的內(nèi)容是完好無損的,并且字節(jié)順序是相同的。

          結(jié)束語
          由于許多致力于安全性的公司已經(jīng)提供了上市的產(chǎn)品,因而 SAML 有一個良好的起點(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 的首席軟件工程師)和軟件開發(fā)論壇(Software Development Forum,www.sdforum.org)的 Web 服務(wù)特別興趣組(Web Services Special Interest Group),感謝他們?yōu)檠芯勘疚乃峁┑膸椭?/I>

          參考資料

          關(guān)于作者
          Frank Cohen 是一位 “上門服務(wù)”人士,當(dāng)企業(yè)需要測試和解決復(fù)雜的互操作信息系統(tǒng)(特別是 Web 服務(wù))中的問題時,他可以上門服務(wù)。Frank 是 PushToTest(一家測試自動化解決方案公司)的創(chuàng)始人和幾本有關(guān)測試信息系統(tǒng)的書籍的作者。Frank 最近出版的新書 Automating Web Tests with TestMaker現(xiàn)在可在 http://www.pushtotest.com/ptt找到。可以通過 fcohen@pushtotest.com與他聯(lián)系。

          posted on 2005-09-29 09:20 笨笨 閱讀(2548) 評論(0)  編輯  收藏 所屬分類: J2EE 、ALL 、Web Services
          主站蜘蛛池模板: 霍山县| 亚东县| 静海县| 北票市| 宁津县| 康定县| 惠来县| 左贡县| 松阳县| 新邵县| 抚宁县| 多伦县| 龙川县| 赣榆县| 叙永县| 巴彦淖尔市| 济宁市| 西乡县| 鄱阳县| 洛阳市| 个旧市| 甘孜| 封开县| 余庆县| 廉江市| 株洲县| 金门县| 广德县| 安图县| 靖江市| 特克斯县| 平凉市| 清远市| 玛多县| 邯郸市| 六安市| 巫溪县| 永宁县| 前郭尔| 景东| 五大连池市|