SAML 令牌和声明
安全断言标记语言 (SAML)** 令牌是声明的 XML 表示形式。默认情况下,Windows Communication Foundation (WCF) 在联合安全方案中使用的 SAML 令牌称作“已颁发令牌”**。
SAML 令牌包含由一个实体所生成的关于另一实体的多组声明的语句。例如,在联合安全方案中,语句是由安全令牌服务针对系统中的某一用户所生成的。安全令牌服务将对 SAML 令牌进行签名,以指示令牌中所包含语句的真实性。此外,SAML 令牌与 SAML 令牌用户确实了解的加密密钥材料关联。这就向依赖方证明了 SAML 令牌实际上是颁发给该用户的。例如,在典型的方案中:
客户端向安全令牌服务请求 SAML 令牌,并通过使用 Windows 证书对该安全令牌服务进行身份验证。
安全令牌服务向客户端颁发 SAML 令牌。SAML 令牌使用与安全令牌服务关联的证书进行签名,并包含针对目标服务所加密的校验密钥。
客户端还将接收校验密钥的副本**,然后将 SAML 令牌提交到应用程序服务(依赖方**)并使用该校验密钥对消息进行签名。
依赖方可通过 SAML 令牌上的签名了解到,该令牌是由安全令牌服务颁发的;依赖方还可通过使用校验密钥创建的消息签名了解到,该令牌是颁发给客户端的。
从 Claim 到 SamlAttribute
在 WCF 中,SAML 令牌中的语句是作为 SamlAttribute 对象建模的,可以直接从 Claim 对象填充,前提是 Claim 对象的 Right 属性为 PossessProperty,并且 Resource 属性的类型为 String。例如:
Dim myClaim As New Claim(ClaimTypes.GivenName, "Martin", _
Rights.PossessProperty)
Dim sa As New SamlAttribute(myClaim)
Claim myClaim = new Claim(
ClaimTypes.GivenName, "Martin", Rights.PossessProperty);
SamlAttribute sa = new SamlAttribute(myClaim);
注意: |
---|
如果 SAML 令牌在消息中序列化,无论是在安全令牌服务颁发这些令牌时,还是在客户端将其作为身份验证的一部分提交到服务中时,最大消息大小配额都必须足够大,以便能够容纳 SAML 令牌和其他消息部分。正常情况下,默认消息大小配额足够使用。但是,如果 SAML 令牌由于包含数以百计的声明而过于庞大,您可能需要提高配额,以便容纳序列化的令牌。有关更多信息,请参见 数据的安全考虑事项. |
从 SamlAttribute 到 Claim
在消息中接收到 SAML 令牌时,SAML 令牌中的各种语句将转换为 IAuthorizationPolicy 对象,并放置在 AuthorizationContext 中。来自每个 SAML 语句的声明将由 AuthorizationContext 的 ClaimSets 属性返回,并可对这些声明进行检查,以确定是否对该用户进行身份验证和授权。
另请参见
任务
如何:创建联合客户端
如何:在联合身份验证服务上配置凭据
如何:创建自定义声明
参考
AuthorizationContext
IAuthorizationPolicy
ClaimSet