声明和令牌

本主题描述 Windows Communication Foundation (WCF) 根据所支持的默认令牌创建的各种声明类型。

可以使用 ClaimSetClaim 类来检查客户端凭据的声明。 ClaimSet 包含 Claim 对象的集合。 每个 Claim 都具有以下重要成员:

  • ClaimType 属性返回的统一资源标识符 (URI) 指定了所做声明的类型。 例如,声明类型可能是证书的指纹,在这种情况下,URI 为 http://schemas.microsoft.com/ws/20005/05/identity/claims/thumprint

  • Right 属性返回的 URI 指定了声明权限。 预定义的权限位于 Rights 类中(IdentityPossessProperty)。

  • Resource 属性返回与声明关联的资源。

此外,每个 ClaimSet 还包含一个 Issuer 属性,以表示 ClaimSetIssuer

Windows 帐户

在客户端凭据映射到 Windows 用户帐户的情况下,生成的 ClaimSet 具有以下值:

  • IssuerClaimSet 类的静态 Windows 属性返回的值。

  • 集合中的声明包括:

    • Claim 值为安全标识符 (SID)、ClaimType 属性值为 Right 以及返回实际 SID 值的 IdentityResource。 SID 是域控制器颁发给每个用户的一个唯一值。 SID 用于在与 Windows 安全交互时标识用户。

    • Claim 值为 SID、ClaimTypeRight 以及 PossessProperty 为 SID 值的 Resource

    • ClaimClaimTypeNameRight 以及 PossessProperty 为包含用户名的字符串(如“MYMACHINE\Bob”)的 Resource

    • 用户所属的各个组的 PossessProperty 的附加 SID 声明。

证书

在客户端凭据为证书的情况下,生成的 ClaimSet 具有以下各值:

  • 对于自行颁发的证书,IssuerClaimSet 本身。 ClaimSet 返回 ClaimTypeThumbprintRightIdentity 以及 Resource 值,该值是一个包含证书指纹的 Byte 数组。

  • 对于证书颁发机构颁发的证书,颁发者为表示证书颁发机构的证书的 ClaimSet

  • 集合中的 Claims 包括:

    • Claim 为 Thumbprint、ClaimType 为 PossessProperty 以及 Right 为包含证书指纹的字节数组的 Resource

    • 各种类型的其他 PossessProperty 声明,包括表示各种证书属性的 X500DistinguishedName、Dns、Name、Upn 和 Rsa。 Rsa 声明的资源是与证书关联的公钥。注意,如果客户端凭据类型是服务映射到 Windows 帐户的证书,则会生成两个 ClaimSet 对象。 第一个对象包含与 Windows 帐户相关的所有声明,第二个对象包含与证书相关的所有声明。

用户名/密码

在客户端凭据是未映射到 Windows 帐户的用户名/密码(或等效项)的情况下,生成的 ClaimSetSystem 类的静态 ClaimSet 属性颁发。 ClaimSet 包含类型为 Name、资源为客户端提供的用户名的 Identity 声明。 对应声明的 RightPossessProperty

RSA 密钥

在使用与证书无关联的 RSA 密钥的情况下,生成的 ClaimSet 是自行颁发的,并且包含类型为 Rsa、资源为 RSA 密钥的 Identity 声明。 对应声明的 RightPossessProperty

SAML

在客户端使用安全断言标记语言 (SAML) 令牌进行身份验证的情况下,生成的 ClaimSet 由已对 SAML 令牌进行签名的实体来颁发,通常为颁发了 SAML 令牌的安全令牌服务 (STS) 的证书。 ClaimSet 中包含 SAML 令牌中的各种声明。 如果 SAML 令牌包含非 SamlSubject 名称的 null,则会创建一个类型为 Identity、资源类型为 NameIdentifierSamlNameIdentifierClaimResource 声明。

标识声明和 ServiceSecurityContext.IsAnonymous

如果从客户端凭据生成的任何 ClaimSet 对象都不包含 RightIdentity, 的声明,则 IsAnonymous 属性将返回 true。 如果存在一个或多个此类声明,则 IsAnonymous 属性将返回 false

另请参阅