如何:在联合身份验证服务上配置凭据
在 Windows Communication Foundation (WCF) 中,创建联合服务涉及以下主要过程:
- 配置 WSFederationHttpBinding 或类似的自定义绑定。有关 创建适当绑定的更多信息,请参见如何:创建 WSFederationHttpBinding。
- 配置 IssuedTokenServiceCredential,它控制如何对提供给服务的已颁发令牌进行身份验证。
本主题提供有关第二个步骤的详细信息。有关 联合服务如何工作的更多信息,请参见联合。
在代码中设置 IssuedTokenServiceCredential 的属性
使用 ServiceCredentials 类的 IssuedTokenAuthentication 属性返回对 IssuedTokenServiceCredential 实例的引用。该属性可从 ServiceHostBase 类的 Credentials 属性访问。
如果要对自行颁发的令牌(比如 CardSpace 卡)进行身份验证,则将 AllowUntrustedRsaIssuers 属性设置为 true。默认值为 false。
用 X509Certificate2 类的实例填充由 KnownCertificates 属性返回的集合。每个实例表示一个颁发者,服务将从该颁发者对令牌进行身份验证。
提示
与 ScopedCertificates 属性返回的客户端集合不同,已知证书集合不是键控集合。不管发送包含已颁发令牌的消息的客户端地址是什么,服务都接受指定证书颁发的令牌(还受其他限制,这一点将在本主题的后面说明)。
将 CertificateValidationMode 属性设置为 X509CertificateValidationMode 枚举值之一。这只能在代码中完成。默认值为 ChainTrust。
如果 CertificateValidationMode 属性设置为 Custom,则将自定义 X509CertificateValidator 类的一个实例分配给 CustomCertificateValidator 属性。
如果 CertificateValidationMode 设置为 ChainTrust 或 PeerOrChainTrust,则将 RevocationMode 属性设置为 X509RevocationMode 枚举中的适当值。请注意,在 PeerTrust 或 Custom 验证模式中不使用吊销模式。
如果需要,将自定义 SamlSerializer 类的一个实例分配给 SamlSerializer 属性。例如,如果要分析自定义 SAML 断言,则需要自定义安全断言标记语言 (SAML) 序列化程序。
在配置中设置 IssuedTokenServiceCredential 的属性
创建一个 <issuedTokenAuthentication> 元素作为 <serviceCredentials> 元素的子项。
如果要验证自行颁发的令牌(比如 CardSpace 卡),则将 <issuedTokenAuthentication> 元素的 allowUntrustedRsaIssuers 属性设置为 true。
创建一个 <knownCertificates> 元素,作为 <issuedTokenAuthentication> 元素的子元素。
创建零个或多个 <add> 元素作为 <knownCertificates> 元素的子项,并指定如何使用 storeLocation、storeName、x509FindType 和 findValue 属性来定位证书。
必要时,将 <issuedTokenAuthentication> 元素的 samlSerializer 属性设置为自定义 SamlSerializer 类的类型名称。
示例
下面的示例在代码中设置 IssuedTokenServiceCredential 的属性。
为了使联合服务能够对客户端进行身份验证,必须满足有关已颁发令牌的下列各项条件:
- 如果已颁发令牌的数字签名使用 RSA 安全密钥标识符,则 AllowUntrustedRsaIssuers 属性必须为 true。
- 如果已颁发令牌的签名使用 X.509 颁发者序列号、X.509 主题密钥标识符或 X.509 指纹安全标识符,则已颁发的令牌必须由 IssuedTokenServiceCredential 类的 KnownCertificates 属性返回的集合中的证书进行签名。
- 如果使用 X.509 证书对已颁发的令牌进行签名,该证书必须按照由 CertificateValidationMode 属性的值指定的语义进行验证,无论该证书是作为 X509RawDataKeyIdentifierClause 发送给依赖方还是从 KnownCertificates 属性获取。有关 X.509 证书验证的更多信息,请参见使用证书。
例如,将 CertificateValidationMode 设置为 PeerTrust 将对签名证书位于 TrustedPeople 证书存储中的任何已颁发令牌进行身份验证。在这种情况下,请将 TrustedStoreLocation 属性设置为 CurrentUser 或 LocalMachine。您可以选择其他模式,包括 Custom。如果选择了 Custom,则必须将 X509CertificateValidator 类的一个实例分配给 CustomCertificateValidator 属性。自定义验证程序可以使用它喜欢的任何条件来验证证书。有关更多信息,请参见 如何:创建使用自定义证书验证程序的服务。
另请参见
任务
如何:在 WSFederationHttpBinding 上禁用安全会话
如何:创建 WSFederationHttpBinding
如何:创建联合客户端
概念
联合
联合与信任
使用证书
SecurityBindingElement 身份验证模式