安全主張標記語言（，簡稱 SAML，發音 samel）是一個基於 XML 的開源標準資料格式，它在當事方之間交換身份驗證和授權資料，尤其是在和服務提供者之間交換。SAML 是 OASIS 安全服務技術委員會的一個產品，始於 2001 年。其最近的主要更新發佈於 2005 年，但協議的增強仍在透過附加的可選標準穩步增加。 SAML 解決的最重要的需求是網頁瀏覽器單一登入（SSO）。單點登入在內部網層面比較常見（例如使用 Cookie），但將其擴充套件到內部網之外則一直存在問題，並使得不可互操作的專有技術激增。（另一種近日解決瀏覽器單點登入問題的方法是協議） 原則 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（XTASS），來自 VeriSign Information Technology Markup Language（ITML），來自 Jamcracker 在這項工作的基礎上，OASIS 於 2002 年 11 月宣佈 安全主張標記語言（SAML）V10 規範成為一個 OASIS 標準。 與此同時，大型企業、非營利及政府組織的聯盟提出了一個擴充套件 SAML 標準的 自由聯盟統一聯合框架（IDFF）。與其前身 SAML 類似，Liberty IDFF 提出了一個標準化、跨域、基於 Web 的單點登入框架。此外，Liberty 描繪了一個 信任圈（circle of trust），其中每個參與域被信任將準確記錄識別使用者的過程、所使用的身份驗證型別，以及任何與生成身份驗證憑據相關的策略。信任圈中的其他成員可以查驗這些策略，以決定是否信任此類資訊。 雖然 IDFF 開發了 Liberty，SSTC 已開始小規模升級到 SAML 規範。這使得 SSTC 在 2003 年 9 月批准了 SAML V11 規範。在同月，Liberty 將 IDFF 貢獻至 OASIS，從而為 SAML 下一版本奠基。2005 年 3 月，SAML V20 被宣佈成為一項 OASIS 標準。SAML V20 意味著 Liberty IDFF 及其他專有擴充套件的收斂，以及包括 SAML 本身的早期版本。大多數 SAML 實現支援 V20，並也大多支援 V11 以實現向後相容。截至 2008 年 1 月，SAML V20 的開發已在政府、高等教育和全球商業企業中普遍存在。 版本 SAML 自 V10 以來已進行一次重大及一次次要修訂。 SAML 10 於 2002 年 11 月獲准成為 OASIS 標準 於 2003 年 9 月獲准為 OASIS 標準 SAML 20 於 2005 年 3 月成為 OASIS 標準 Liberty Alliance 在 2003 年 9 月將其自由聯盟統一聯合框架（IDFF）貢獻至 OASIS SSTC： IDFF 11 於 2003 年 4 月釋出 IDFF 12 於 2003 年 11 月完成 SAML 的 10 和 11 版本很類似，僅存在微小差異。 SAML 20 與 SAML 11 則有著實質性的差異。雖然兩者都是解決相同的使用案例，但 SAML 20 與 11 並不相容。 儘管 IDFF 12 已作為 SAML 20 的基礎貢獻至 OASIS，但在 SAML 20 與 IDFF 12 之間 有著一些重要的差異。尤其是儘管這兩個規範同根同源，但兩者並不相容。 設計 SAML 建立在一些現有標準之上： Extensible Markup Language XML 大多數 SAML 交換是以一個標準化的 XML 方言表示，這也是 SAML 的名稱（Security Assertion Markup Language）的根源。 XML Schema XSD SAML 主張和協議部分採用 XML Schema。 XML Signature 和 SAML 20 都為身份驗證和訊息完整性使用基於 XML Signature 標準的數字簽名。 XML Encryption SAML 20 使用 XML Encryption 為加密名稱識別符號、加密屬性和加密主張提供元素（SAML 11 沒有加密功能）。但 XML 加密據報有著嚴重的安全問題。 Hypertext Transfer Protocol HTTP SAML 很大程度上依賴超文字傳輸協議作為其通訊協議。 SOAP SAML 指定使用 SOAP，尤其是 SOAP 11 。 SAML 定義了基於 XML 的主張、協議、繫結和配置。術語 SAML 核心（SAML Core）指 SAML 主張的一般語法和語義，以及用於請求和在系統實體間傳輸這些主張的協議。SAML 協議指誰來傳輸，而不是如何傳輸（後者由所選擇的繫結決定）。因此 SAML 核心只定義了 純粹的 SAML 主張，以及 SAML 的請求和響應元素。 SAML 繫結決定 SAML 請求和響應如何對映到標準的訊息或通訊協議。一個重要的、同步的繫結是 SAML SOAP 繫結。 SAML 配置是使用特定主張、協議和繫結組成的適用於所定義使用情況的一個具體表現形式。 主張 一個 SAML 主張包含一個安全資訊包： samlAssertion samlAssertion 簡而言之，依賴方按下述方式解釋一個主張： 主張 A 是在條件 C 有效的前提下由釋出者 R 關於主題 S 在時間 t 釋出的 。 SAML 主張通常從 IdP 傳送到 SP。主張包括一些 SP 用來做許可權控制的宣告（statements）。SAML 提供如下三種語句： 身份驗證（Authentication）宣告 屬性（Attribute）宣告 授權決策（Authorization decision）宣告 身份驗證宣告會向 SP 主張，該委託人確實被 IdP 在一個特定的時間透過一個特定的認證方式成功認證。關於該被認證的委託人的其他資訊（也叫身份驗證上下文）也可能會包含在一條身份驗證宣告中。 屬性宣告會主張，一個主題和一些屬性關聯。一個屬性是一個簡單的鍵值對。依賴方使用屬性來實現訪問控制。 授權決策宣告會主張，在證據 E 下一個主題是否被允許在資源 R 上執行動作 A。SAML 中的授權決策宣告的功能被有意的限制了，因為在更高階的使用場景中更推薦使用 XACML。 協議 A SAML protocol describes how certain SAML elements including assertions are packaged within SAML request and response elements and gives the processing rules that SAML entities must follow when producing or consuming these elements For the most part a SAML protocol is a simple requestresponse protocol The most important type of SAML protocol request is called a query A service provider makes a query directly to an identity provider over a secure back channel Thus query messages are typically bound to SOAP Corresponding to the three types of statements there are three types of SAML queries Authentication query Attribute query Authorization decision query Of these the attribute query is perhaps most important and still the object of much research The result of an attribute query is a SAML response containing an assertion which itself contains an attribute statement See the SAML 20 topic for Beyond queries SAML 11 specifies no other protocols SAML 20 expands the notion of protocol considerably The following protocols are described in detail in SAML 20 Core Assertion Query and Request Protocol Authentication Request Protocol Artifact Resolution Protocol Name Identifier Management Protocol Single Logout Protocol Name Identifier Mapping Protocol Most of these protocols are completely new in SAML 20 繫結 A SAML binding is a mapping of a SAML protocol message onto standard messaging formats andor communications protocols For example the SAML SOAP binding specifies how a SAML message is encapsulated in a SOAP envelope which itself is bound to an HTTP message SAML 11 specifies just one binding the SAML SOAP Binding In addition to SOAP implicit in SAML 11 Web Browser SSO are the precursors of the HTTP POST Binding the HTTP Redirect Binding and the HTTP Artifact Binding These are not defined explicitly however and are only used in conjunction with SAML 11 Web Browser SSO The notion of binding is not fully developed until SAML 20 SAML 20 completely separates the binding concept from the underlying profile In fact there is a brand that defines the following standalone bindings SAML SOAP Binding based on SOAP 11 Reverse SOAP PAOS Binding HTTP Redirect GET Binding HTTP POST Binding HTTP Artifact Binding SAML URI Binding This reorganization provides tremendous flexibility taking just Web Browser SSO alone as an example a service provider can choose from four bindings HTTP Redirect HTTP POST and two flavors of HTTP Artifact while the identity provider has three binding options HTTP POST plus two forms of HTTP Artifact for a total of twelve 12 possible deployments of the SAML 20 Web Browser SSO Profile 配置 A SAML profile describes in detail how SAML assertions protocols and bindings combine to support a defined use case The most important SAML profile is the Web Browser SSO Profile SAML 11 specifies two forms of Web Browser SSO the BrowserArtifact Profile and the BrowserPOST Profile The latter passes assertions by value whereas BrowserArtifact passes assertions by reference As a consequence BrowserArtifact requires a backchannel SAML exchange over SOAP In SAML 11 all flows begin with a request at the identity provider for simplicity Proprietary extensions to the basic IdPinitiated flow have been proposed by for example The Web Browser SSO Profile was completely refactored for SAML 20 Conceptually SAML 11 BrowserArtifact and BrowserPOST are special cases of SAML 20 Web Browser SSO The latter is considerably more flexible than its SAML 11 counterpart due to the new plugandplay binding design of SAML 20 Unlike previous versions SAML 20 browser flows begin with a request at the service provider This provides greater flexibility but SPinitiated flows naturally give rise to the socalled Identity Provider Discovery problem the focus of much research today In addition to Web Browser SSO SAML 20 introduces numerous new profiles SSO Profiles Web Browser SSO Profile Enhanced Client or Proxy ECP Profile Identity Provider Discovery Profile Single Logout Profile Name Identifier Management Profile Artifact Resolution Profile Assertion QueryRequest Profile Name Identifier Mapping Profile SAML Attribute Profiles Aside from the SAML Web Browser SSO Profile some important thirdparty profiles of SAML include OASIS Web Services Security WSS Technical Committee OASIS WSSecurity SAML Token Profile Liberty Identity Federation Framework IDFF Liberty Identity Web Services Framework IDWSF OASIS eXtensible Access Control Markup Language XACML Technical Committee SAML 20 Profile of XACML v20 安全 SAML 規範推薦、並在某些情況下要求各種安全機制： TLS 10 用於傳輸層安全 XML Signature 和 XML Encryption 用於訊息層安全 Requirements are often phrased in terms of mutual authentication integrity and confidentiality leaving the choice of security mechanism to implementers and deployers 使用 SAML 的主要用途是 網頁瀏覽器單點登入（SSO）。A user wielding a user agent usually a web browser requests a web resource protected by a SAML service provider The service provider wishing to know the identity of the requesting user issues an authentication request to a SAML identity provider through the user agent The resulting protocol flow is depicted in the following diagram 1 Request the target resource at the SP SAML 20 only The principal via an HTTP user agent requests a target resource at the service provider nowikihttpsspexamplecommyresourcenowiki The service provider performs a security check on behalf of the target resource If a valid security context at the service provider already exists skip steps 27 2 Redirect to the SSO Service at the IdP SAML 20 only The service provider determines the users preferred identity provider by unspecified means and redirects the user agent to the SSO Service at the identity provider nowikihttpsidpexampleorgSAML2SSORedirectSAMLRequestrequestnowiki The value of the SAMLRequest parameter is the Base64 encoding of a deflated samlpAuthnRequest element 3 Request the SSO Service at the IdP SAML 20 only The user agent issues a GET request to the SSO service at the identity provider where the value of the SAMLRequest parameter is taken from the URL query string at step 2 The SSO service processes the AuthnRequest and performs a security check If the user does not have a valid security context the identity provider identifies the user details omitted 4 Respond with an XHTML form The SSO service validates the request and responds with a document containing an XHTML form form methodpost actionhttpsspexamplecomSAML2SSOPOST input typehidden nameSAMLResponse valueresponse input typesubmit valueSubmit form The value of the SAMLResponse parameter is the base64 encoding of a samlpResponse element 5 Request the Assertion Consumer Service at the SP The user agent issues a POST request to the assertion consumer service at the service provider The value of the SAMLResponse parameter is taken from the XHTML form at step 4 6 Redirect to the target resource The assertion consumer service processes the response creates a security context at the service provider and redirects the user agent to the target resource 7 Request the target resource at the SP again The user agent requests the target resource at the service provider again nowikihttpsspexamplecommyresourcenowiki 8 Respond with requested resource Since a security context exists the service provider returns the resource to the user agent In SAML 11 the flow begins with a request to the identity providers intersite transfer service at step 3 In the example flow above all depicted exchanges are frontchannel exchanges that is an HTTP user agent browser communicates with a SAML entity at each step In particular there are no backchannel exchanges or direct communications between the service provider and the identity provider Frontchannel exchanges lead to simple protocol flows where all messages are passed by value using a simple HTTP binding GET or POST Indeed the flow outlined in the previous section is sometimes called the Lightweight Web Browser SSO Profile Alternatively for increased security or privacy messages may be passed by reference For example an identity provider may supply a reference to a SAML assertion called an artifact instead of transmitting the assertion directly through the user agent Subsequently the service provider requests the actual assertion via a back channel Such a backchannel exchange is specified as a SOAP message exchange SAML over SOAP over HTTP In general any SAML exchange over a secure back channel is conducted as a SOAP message exchange On the back channel SAML specifies the use of SOAP 11 The use of SOAP as a binding mechanism is optional however Any given SAML deployment will choose whatever bindings are appropriate 參見 身份管理 OAuth 參考資料 外部連結 OASIS Security Services Technical Committee Cover Pages Security Assertion Markup Language SAML Tutorial Video Ten Things You Need To Know About SAML How to Study and Learn SAML Demystifying SAML First public SAML 20 identity provider Federated ID gains momentum SAML 101 The Basics of SAML Category 計算機訪問控制 Category 聯邦身份 Category 身份管理 Category 基於 XML 的標準 Category 身份管理系統 Category 元資料標準