SAML

基於XML標準的標記語言

SAML即安全斷言標記語言,英文全稱是Security Assertion Markup Language。它是一個基於XML的標準,用於在不同的安全域(security domain)之間交換認證和授權數據。在SAML標準定義了身份提供者(identity provider)和服務提供者(service provider),這兩者構成了前面所說的不同的安全域。 SAML是OASIS組織安全服務技術委員會(Security Services Technical Committee)的產品。

概述


安全斷言標記語言(SAML)是XML標準的數據交換和授權認證安全領域的關係,也就是說,在服務和身分提供者. SAML是產品的安全服務技術委員會 SAML 1.1 FAQ

簡介


安全是所有Web項目在設計時都要考慮的一個重要因素。無論是選擇最短口令,決定何時使用SSL加密HTTP會話,還是通過自動登錄cookie來識別用戶,都經常要付出重大的設計努力,以保護用戶的身份信息和他們可能存放於Web站點的其他資料。糟糕的安全性可能帶來公關災難。當最終用戶努力保持對其個人信息的控制時,他們要面臨令人迷惑的隱私政策,需要牢記眾多站點的不同口令,以及遭遇“釣魚式攻擊”事件。在宏觀層次上,數字身份引起了許多複雜的技術和社會問題,業界一些團體如Liberty Alliance和IdentityGang都正試圖通過開發新的技術標準來解決它們。在較小的規模上,可以使用一些工具來為用戶提供更好的安全性。請考慮口令管理問題。用戶訪問他們保存個人資料的Web站點,在可以存取他們的資料之前必須經過驗證。通過驗證來鑒別用戶,確保他們是所聲稱的用戶。進行驗證最簡單方式是使用口令。然而,若每個站點都需要各自的一套口令,用戶將有難以控制的大量口令。1998年微軟首先嘗試通過其Passport network提供該問題的全球解決方案。Passport使得任意Web站點使用用戶提交給Passport的個人資料(如用戶名、地址、信用卡號)成為可能。Passport是單點登錄(single sign-on,SSO)的第一次電子商務嘗試。它沒有流行起來,部分原因是由於人們對系統封閉性的擔心。然而,SSO的理念非常引人注目,許多開放標準和商業計劃都追隨Passport其後。通過SSO,某個Web站點可以與其他站點共享用戶身份信息。 SSO對於使用應用服務提供商(Application Service Provider,ASP)軟體服務的企業特別有用。ASP在自己的伺服器上宿主應用程序,出售其訪問權作為服務。公司可以在它的標準目錄伺服器里管理自己的用戶和口令,然後通過SSO授予用戶訪問ASP應用程序的許可權。SSO允許公司管理自己用戶的信息,不必為每一員工維護多個用戶賬號。對用戶來說,SSO的好處在於他們可以在多個應用程序中使用一個用戶名和口令,並且在應用程序之間切換時無需重新驗證。SSO不僅僅用於Web應用程序,它可用於任何類型的應用程序,只要有安全地傳送身份信息的協議。這種通信方式的開放標準就是安全性斷言標記語言(SAML)。

定義


1. 什麼是SAML
SAML(Security Assertion Markup Language)是一個XML框架,也就是一組協議,可以用來傳輸安全申明。比如,兩台遠程機器之前要通訊,為了保證安全,我們可以採用加密等措施,也可以採用SAML來傳輸,傳輸的數據以XML形式,符合SAML規範,這樣我們就可以不要求兩台機器採用什麼樣的系統,只要求能理解SAML規範即可,顯然比傳統的方式更好。SAML 規範是一組Schema 定義。
可以這麼說,在Web Service 領域,schema就是規範,在Java領域,API就是規範。(我自己總結的)

作用


SAML 作用?
SAML 主要包括三個方面:
1.認證申明。表明用戶是否已經認證,通常用於單點登錄
2.屬性申明。表明 某個Sujbect 的屬性。
3.授權申明。表明 某個資源的許可權。
SAML框架是什麼?
SAML就是客戶向伺服器發送SAML 請求,然後伺服器返回SAML響應。數據的傳輸以符合SAML規範的XML格式表示。 SAML 可以建立在SOAP上傳輸,也可以建立在其他協議上傳輸。
因為SAML的規範由幾個部分構成:SAML Assertion,SAML Prototol,SAML binding等。
SAML 安全嗎,因為傳輸都是XML明文?
當然,SAML就是為了解決安全問題提出的。SAML 基於 XML 簽名規範,所以整個XML傳輸雖然是明文,但也法被修改。顯然,也可以將XML加密后在傳輸了。

安全


由於SAML在兩個擁有共享用戶的站點間建立了信任關係,所以安全性是需考慮的一個非常重要的因素。SAML中的安全弱點可能危及用戶在目標站點的個人信息。SAML依靠一批制定完善的安全標準,包括SSL和X.509,來保護SAML源站點和目標站點之間通信的安全。源站點和目標站點之間的所有通信都經過了加密。為確保參與SAML交互的雙方站點都能驗證對方的身份,還使用了證書。

BEA


BEA WebLogic Server 9.0是第一個包含了對SAML支持的WebLogic Server版本。WebLogic Server 9.1中進一步加強了對SAML的支持。WebLogic Server把SAML作為WebLogic Security Service的一部分使用。SAML用來為WebLogic Web services和跨WebLogic域共享驗證信息提供SSO支持。除SAML外,WebLogic Server也為Windows桌面SSO支持Simple and Protected Negotiate (SPNEGO)協議。SAML可用來提供訪問Web應用程序和Web service的許可權。
對於一些應用程序,您僅需付出很少甚至無需付出額外的程序設計努力,就能使用WebLogic Server中的SAML支持。如果用戶應用程序使用配置為WebLogic 安全域一部分的安全設置,那麼集成SAML是一個首要的系統管理任務。WebLogic server可配置作為SAML源站點或SAML目標站點。要使伺服器成為SAML源站點,需配置一個SAML credential Mapper。要使伺服器成為SAML目標站點,需配置一個SAML Identity Asserter.
如果用戶應用程序安全模式為與WebLogic Security Service進行交互,包含了自己的特定於WebLogic的代碼,可以使用WebLogic的SAML API把該定製擴展到SAML。該API提供對WebLogic SAML服務主要組件的編程式訪問。用戶可以使用應用程序自身的業務邏輯來擴展諸如SAMLCredentialNameMapper和 SAMLIdentityAssertionNameMapper這樣的類。一旦用戶有了自己的定製類,WebLogic管理控制台就允許用戶配置其 SAML Credential Mapper(源站點)或SAML Identity Asserter(目標站點),以便使用那些類。惟一的要求是用戶的定製類需要在系統類路徑中,非常類似於WebLogic啟動類,這可能對用戶部署策略產生影響。
最後,如果應用程序安全模式完全獨立於WebLogic Security Service,用戶將不能從WebLogic的SAML工具中獲益。用戶要使其應用程序支持SAML就需要做更多工作,要麼實現WebLogic所提供的某些服務的簡化版本,要麼集成那些服務的第三方版本。但是,用戶仍將受益於可在任何J2EE應用伺服器或在如Tomcat這樣的Java Web伺服器應用程序上使用SAML。有商業和開源的SAML支持可供選擇。開源的選擇中有OpenSAML和相關的Shibboleth項目。 OpenSAML是一個SAML工具包,可用來建立用戶自己的SAML源站點和目標站點。Shibboleth更進一步,它提供了一個構建在 OpenSAML之上的“基於SAML 1.1的跨域Web單點登錄平台”。SourceID為Java 和.NET中的SAML 1.1提供了一套開源工具包。在Apache項目下沒有完整的SAML工具包,但WSS4J項目包含了對OpenSAML的一些支持。

原則


SAML規範定義了三個角色:委託人(通常為一名用戶)、身份提供者(IdP),服務提供者(SP)。在用SAML解決的使用案例中,委託人從服務提供者那裡請求一項服務。服務提供者請求身份提供者並從那裡並獲得一個身份斷言。服務提供者可以基於這一斷言進行訪問控制的判斷——即決定委託人是否有權執行某些服務。
在將身份斷言發送給服務提供者之前,身份提供者也可能向委託人要求一些信息——例如用戶名和密碼,以驗證委託人的身份。SAML規範了三方之間的斷言,尤其是斷言身份消息是由身份提供者傳遞給服務提供者。在SAML中,一個身份提供者可能提供SAML斷言給許多服務提供者。同樣的,一個服務提供者可以依賴並信任許多獨立的身份提供者的斷言。
SAML沒有規定身份提供者的身份驗證方法;他們大多使用用戶名和密碼,但也有其他驗證方式,包括採用多重要素驗證。諸如輕型目錄訪問協議、RADIUS和Active Directory等目錄服務允許用戶使用一組用戶名和密碼登錄,這是身份提供者使用身份驗證令牌的一個典型來源。許多流行的網際網路社交網路服務也提供身份驗證服務,理論上他們也可以支持SAML交換。

歷史


OASIS安全服務技術委員會(SSTC)於2001年1月首次舉行會議,提出“定義一個用於交換身份驗證和授權的XML框架。”為完成此目標,下列知識產權在該年的頭兩個月內向SSTC進行了捐獻:
● Security Services Markup Language(S2ML),來自Netegrity
● AuthXML,來自Securant
● XML Trust Assertion Service Specification(X-TASS),來自VeriSign
● Information Technology Markup Language(ITML),來自Jamcracker
在這項工作的基礎上,OASIS於2002年11月宣布“安全斷言標記語言”(SAML)V1.0規範成為一個OASIS標準。
與此同時,大型企業、非營利及政府組織的聯盟Liberty Alliance提出了一個擴展SAML標準的“自由聯盟統一聯合框架”(ID-FF)。與其前身SAML類似,Liberty ID-FF提出了一個標準化、跨域、基於Web的單點登錄框架。此外,Liberty描繪了一個“信任圈”(circle of trust),其中每個參與域被信任將準確記錄識別用戶的過程、所使用的身份驗證類型,以及任何與生成身份驗證憑據相關的策略。信任圈中的其他成員可以查驗這些策略,以決定是否信任此類信息。
雖然ID-FF開發了Liberty,SSTC已開始小規模升級到SAML規範。這使得SSTC在2003年9月批准了SAML V1.1規範。在同月,Liberty將ID-FF貢獻至OASIS,從而為SAML下一版本奠基。2005年3月,SAML V2.0被宣布成為一項OASIS標準。SAML V2.0意味著Liberty ID-FF及其他專有擴展的收斂,以及包括SAML本身的早期版本。大多數SAML實現支持V2.0,並也大多支持V1.1以實現向後兼容。截至2008年1月,SAML V2.0的開發已在政府、高等教育和全球商業企業中普遍存在。

版本


SAML自V1.0以來已進行一次重大及一次次要修訂。
● SAML 1.0於2002年11月獲准成為OASIS標準
● SAML 1.1於2003年9月獲准為OASIS標準
● SAML 2.0於2005年3月成為OASIS標準
Liberty Alliance在2003年9月將其自由聯盟統一聯合框架(ID-FF)貢獻至OASIS SSTC:
● ID-FF 1.1於2003年4月發布
● ID-FF 1.2於2003年11月完成
SAML的1.0和1.1版本很類似,僅存在微小差異。
SAML 2.0與SAML 1.1則有著實質性的差異。雖然兩者都是解決相同的使用案例,但SAML 2.0與1.1並不兼容。
儘管ID-FF 1.2已作為SAML 2.0的基礎貢獻至OASIS,但在SAML 2.0與ID-FF 1.2之間有著一些重要的差異。尤其是儘管這兩個規範同根同源,但兩者並不兼容。

設計


SAML 創建在一些現有標準之上:
● Extensible Markup Language (XML)
● 大多數SAML交換是以一個標準化的XML方言表示,這也是SAML的名稱(Security Assertion Markup Language)的根源。; XML Schema (XSD): SAML斷言和協議部分採用XML Schema。
● SAML 1.1和SAML 2.0都為身份驗證和消息完整性使用基於XML Signature標準的數字簽名。
● SAML 2.0使用XML Encryption為加密名稱標識符、加密屬性和加密斷言提供元素(SAML 1.1沒有加密功能)。但XML加密據報有著嚴重的安全問題。
Hypertext Transfer Protocol (HTTP)
SAML很大程度上依賴超文本傳輸協議作為其通信協議。
● SOAP
● SAML指定使用SOAP,尤其是SOAP 1.1。
SAML定義了基於XML的斷言、協議、綁定和配置。術語SAML核心(SAML Core)指SAML斷言的一般語法和語義,以及用於請求和在系統實體間傳輸這些斷言的協議。SAML協議指誰來傳輸,而不是如何傳輸(後者由所選擇的綁定決定)。因此SAML核心只定義了“純粹的”SAML斷言,以及SAML的請求和響應元素。
SAML綁定決定SAML請求和響應如何映射到標準的消息或通信協議。一個重要的、同步的綁定是SAML SOAP綁定。
SAML配置是使用特定斷言、協議和綁定組成的適用於所定義使用情況的一個具體表現形式。

參見


● 基於SAML的產品和服務
● 身份管理
● 身份管理系統
● OpenID Connect
● 信息卡
● WS-Federation
● OAuth