SAML 令牌和声明

安全断言标记语言(SAML) 令牌 是声明的 XML 表示形式。 默认情况下,Windows Communication Foundation(WCF)在联合安全方案中使用的 SAML 令牌是颁发令牌

SAML 令牌包含由一个实体所生成的关于另一实体的多组声明的语句。 例如,在联合安全方案中,安全令牌服务会对系统中的用户做出声明。 安全令牌服务对 SAML 令牌进行签名,以指示令牌中包含的语句的真实性。 此外,SAML 令牌与 SAML 令牌用户证明了解的加密密钥材料相关联。 这个证明向信赖方证实了 SAML 令牌确实颁发给了该用户。 例如,在典型方案中:

  1. 客户端从安全令牌服务请求 SAML 令牌,并使用 Windows 凭据向该安全令牌服务进行身份验证。

  2. 安全令牌服务向客户端颁发 SAML 令牌。 SAML 令牌使用与安全令牌服务关联的证书进行签名,并包含为目标服务加密的证明密钥。

  3. 客户端还会收到 校对密钥的副本。 然后,客户端向应用程序服务( 信赖方)提供 SAML 令牌,并使用该证明密钥对消息进行签名。

  4. SAML 令牌上的签名告知信赖方安全令牌服务颁发了令牌。 使用证明密钥创建的消息签名告知信赖方令牌已颁发给客户端。

从 Claim 到 SamlAttribute

在 WCF 中,SAML 令牌中的语句被建模为SamlAttribute对象,这些对象可以直接从Claim对象填充,前提是Claim对象具有Right属性和PossessProperty属性,而PossessProperty属性的类型为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 令牌由于包含数以百计的声明而过于庞大,您可能需要提高配额,以便容纳序列化的令牌。 有关详细信息,请参阅 数据的安全注意事项

从 SamlAttribute 到 Claim

当在消息中接收到 SAML 令牌时,SAML 令牌中的各种语句会被转换为 IAuthorizationPolicy 对象,并放入 AuthorizationContext。 每个 SAML 语句中的声明信息由ClaimSetsAuthorizationContext属性返回,并可以检查以确定是否对用户进行身份验证和授权。

另请参阅