Share via


SAML 權杖與宣告

Security Assertions Markup Language (SAML)「權杖」為宣告的 XML 表示。 根據預設,聯合安全性案例在 Windows Communication Foundation (WCF) 中使用的 SAML 權杖為「發行權杖」

SAML 權杖包含一實體對另一實體所做出之宣告集合的陳述式。 例如,在聯合安全性案例中,陳述式是由系統中關於使用者的安全性權杖服務所表示。 安全性權杖服務會簽署 SAML 權杖,以表示權杖中所含陳述式的真實性。 除此之外,SAML 權杖會與 SAML 權杖使用者證實知悉的密碼編譯金鑰內容產生關聯。 這項證明能滿足信賴憑證者,證實該 SAML 權杖確實簽發至該使用者。 例如,在典型的案例中:

  1. 用戶端向安全性權杖服務要求 SAML 權杖,藉由使用 Windows 認證,驗證至該安全性權杖服務。

  2. 安全性權杖服務簽發 SAML 權杖至用戶端。 SAML 權杖是以與安全性權杖服務相關的憑證進行簽署,並且包含針對目標服務加密的證明金鑰。

  3. 用戶端也會收到一份「證明金鑰」。 然後,用戶端會對應用程式服務 (「信賴憑證者」) 提出 SAML 權杖,並以該證明金鑰簽署訊息。

  4. SAML 權杖上的簽章會告訴信賴憑證者,這是由安全性權杖服務所簽發的權杖。 使用證明金鑰所建立的訊息簽章會告訴信賴憑證者,該權杖曾簽發至用戶端。

從宣告到 SamlAttributes

在 WCF 中,SAML 權杖的陳述式會以 SamlAttribute 物件作為模型,其可從 Claim 物件直接填入,前提是 Claim 物件擁有 PossessPropertyRight 屬性,且 Resource 屬性為類型 String。 例如:

Claim myClaim = new Claim(
    ClaimTypes.GivenName, "Martin", Rights.PossessProperty);
SamlAttribute sa = new SamlAttribute(myClaim);
Dim myClaim As New Claim(ClaimTypes.GivenName, "Martin", _
Rights.PossessProperty)
Dim sa As New SamlAttribute(myClaim)

注意

當 SAML 權杖在訊息中序列化,不論是當這些權杖是安全性權杖服務所核發,或是當這些權杖由用戶端視為驗證的一部分提供至服務,訊息大小配額上限必須大到足以容納 SAML 權杖及其他訊息部分。 正常情況下,預設訊息大小配額應足夠。 然而,若 SAML 權杖因為包含數百個宣告而變很大時,您可能需要增加配額以容納序列化的權杖。 如需詳細資訊,請參閱資料的安全性考量

從 SamlAttributes 到宣告

當 SAML 權杖在訊息內接收時,SAML 權杖內的各種陳述式會轉變成 IAuthorizationPolicy 物件,置於 AuthorizationContext之內。 來自每個 SAML 陳述式的宣告均由 ClaimSetsAuthorizationContext 屬性傳回,並且可進行檢查以決定是否驗證並授權使用者。

另請參閱