SecurityBindingElement 身份验证模式

Windows Communication Foundation (WCF) 提供了几种供客户端和服务互相进行身份验证的模式。您可以通过使用 SecurityBindingElement 类上的静态方法或通过配置为这些身份验证模式创建安全绑定元素。本主题简要说明 18 种身份验证模式。

有关对一种身份验证模式使用该元素的示例,请参见如何:为指定的身份验证模式创建 SecurityBindingElement

基本配置编程

下面的过程说明如何在配置文件中设置身份验证模式。

在配置中设置身份验证模式

  1. <bindings> 元素中添加一个 customBinding Element

  2. 将一个 <binding> 元素作为子元素添加到 <customBinding> 元素中。

  3. <binding> 元素中添加一个 <security> 元素。

  4. authenticationMode 属性设置为下述值之一。例如,下面的代码将模式设置为 AnonymousForCertificate

    <bindings>
      <customBinding>
        <binding name="SecureCustomBinding">
         <security authenticationMode ="AnonymousForCertificate" />
        </binding>
      </customBinding>
    </bindings>
    

以编程方式设置模式

  1. 确定返回类型,可以是以下类型之一:SymmetricSecurityBindingElementTransportSecurityBindingElementAsymmetricSecurityBindingElementSecurityBindingElement

  2. 调用 SecurityBindingElement 类的适当静态方法。例如,下面的代码调用 CreateAnonymousForCertificateBindingElement 方法。

  3. 使用绑定元素创建自定义绑定。有关更多信息,请参见 自定义绑定

模式说明

AnonymousForCertificate

在此身份验证模式中,客户端是匿名的,因此使用 X.509 证书对服务进行身份验证。安全绑定元素是由 CreateAnonymousForCertificateBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 <security> 元素的 authenticationMode 属性设置为 AnonymousForCertificate

AnonymousForSslNegotiated

在此身份验证模式中,客户端是匿名的,因此使用在运行时进行协商的 X.509 证书对服务进行身份验证。安全绑定元素是在为第一个参数传递 false 值时由 CreateSslNegotiationBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 AnonymousForSslNegotiated

CertificateOverTransport

在此身份验证模式中,客户端使用 X.509 证书进行身份验证,此证书作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。在传输层,服务是用 X.509 证书进行身份验证的。安全绑定元素是由 CreateCertificateOverTransportBindingElement 方法返回的 TransportSecurityBindingElement。或者,将 authenticationMode 属性设置为 CertificateOverTransport

IssuedToken

在此身份验证模式中,客户端不向服务进行身份验证,而是提供一个由安全令牌服务颁发的令牌,并证明知道共享密钥。服务也不向客户端进行身份验证,但安全令牌服务会将共享密钥作为已颁发令牌的一部分进行加密,只有服务才能解密该密钥。安全绑定元素是由 CreateIssuedTokenBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 IssuedToken

IssuedTokenForCertificate

在此身份验证模式中,客户端不向服务进行身份验证,而是提供一个由安全令牌服务颁发的令牌,并证明知道共享密钥。颁发的令牌作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。服务使用 X.509 证书对客户端进行身份验证。安全绑定元素是由 CreateIssuedTokenForCertificateBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 IssuedTokenForCertificate

IssuedTokenForSslNegotiated

在此身份验证模式中,客户端不向服务进行身份验证,而是提供一个由安全令牌服务颁发的令牌,并证明知道共享密钥。颁发的令牌作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。使用 X.509 证书对服务进行身份验证。安全绑定元素是由 CreateIssuedTokenForSslBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 IssuedTokenForSslnegotiated

IssuedTokenOverTransport

在此身份验证模式中,客户端不向服务进行身份验证,而是提供一个由安全令牌服务颁发的令牌,并证明知道共享密钥。颁发的令牌作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。在传输层,服务是用 X.509 证书进行身份验证的。安全绑定元素是由 CreateIssuedTokenOverTransportBindingElement 方法返回的 TransportSecurityBindingElement。或者,将 authenticationMode 属性设置为 IssuedTokenOverTransport

Kerberos

在此身份验证模式下,客户端使用 Kerberos 票证向服务进行身份验证。该票证还提供服务器身份验证。安全绑定元素是由 CreateKerberosBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 Kerberos

提示

若要使用此身份验证模式,服务帐户必须与服务主体名称 (SPN) 关联。为此,请在 NETWORK SERVICE 帐户或 LOCAL SYSTEM 帐户下运行服务。也可以使用 SetSpn.exe 工具为服务帐户创建一个 SPN。不论何种情况,客户端都必须使用 <servicePrincipalName> 元素中的正确 SPN,或者通过使用 EndpointAddress 构造函数来应用正确的 SPN。有关更多信息,请参见 服务标识和身份验证

提示

当使用 Kerberos 身份验证模式时,不支持 AnonymousDelegation 模拟级别。

KerberosOverTransport

在此身份验证模式下,客户端使用 Kerberos 票证向服务进行身份验证。Kerberos 令牌作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。在传输层,服务是用 X.509 证书进行身份验证的。安全绑定元素是由 CreateKerberosOverTransportBindingElement 方法返回的 TransportSecurityBindingElement。或者,将 authenticationMode 属性设置为 KerberosOverTransport

提示

若要使用此身份验证模式,服务帐户必须与 SPN 关联。为此,请在 NETWORK SERVICE 帐户或 LOCAL SYSTEM 帐户下运行服务。也可以使用 SetSpn.exe 工具为服务帐户创建一个 SPN。不论何种情况,客户端都必须使用 <servicePrincipalName> 元素中的正确 SPN,或者通过使用 EndpointAddress 构造函数来应用正确的 SPN。有关更多信息,请参见 服务标识和身份验证

MutualCertificate

在此身份验证模式中,客户端使用 X.509 证书进行身份验证,此证书作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。同样使用 X.509 证书对服务进行身份验证。安全绑定元素是由 CreateMutualCertificateBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 MutualCertificate

MutualCertificateDuplex

在此身份验证模式中,客户端使用 X.509 证书进行身份验证,此证书作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。同样使用 X.509 证书对服务进行身份验证。此绑定是由 CreateMutualCertificateDuplexBindingElement 方法返回的 AsymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 MutualCertificateDuplex

MutalSslNegotiation

在此身份验证模式中,客户端和服务都使用 X.509 证书进行身份验证。安全绑定元素是在为第一个参数传递 true 值时由 CreateSslNegotiationBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 MutualSslNegotiated

SecureConversation

安全绑定元素是由 CreateSecureConversationBindingElement 方法返回的 SymmetricSecurityBindingElement。此方法将 SecurityBindingElement 作为一个参数,在初始化过程中使用该参数建立安全会话。或者,将 authenticationMode 属性设置为 SecureConversation

如果未指定启动绑定,则会对启动使用 SspiNegotiated 身份验证模式。

SspiNegotiation

在此身份验证模式中,使用协商协议来执行客户端和服务器身份验证。可能时使用 Kerberos;否则使用 NT LanMan (NTLM)。安全绑定元素是由 CreateSspiNegotiationBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 SspiNegotiated

SspiNegotiatedOverTransport

在此身份验证模式中,使用协商协议来执行客户端和服务器身份验证。可能时使用 Kerberos 协议;否则使用 NTLM。生成的令牌作为认可的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。在传输层,服务还是由 X.509 证书另外进行身份验证。安全绑定元素是由 CreateSspiNegotiationOverTransportBindingElement 方法返回的 TransportSecurityBindingElement。或者,将 authenticationMode 属性设置为 SspiNegotiatedOverTransport

UserNameForCertificate

在此身份验证模式中,客户端使用用户名令牌向服务进行身份验证,此证书作为经过签名的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。服务使用 X.509 证书对客户端进行身份验证。安全绑定元素是由 CreateUserNameForCertificateBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 UserNameForCertificate

对于 UserNameForCertificate 身份验证模式,客户端和服务都必须使用 WS-Security 1.1。

UserNameForSslNegotiated

在此身份验证模式中,客户端使用用户名令牌进行身份验证,此证书作为经过签名的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。使用 X.509 证书对服务进行身份验证。安全绑定元素是由 CreateUserNameForSslBindingElement 方法返回的 SymmetricSecurityBindingElement。或者,将 authenticationMode 属性设置为 UserNameForSslNegotiated

UserNameOverTransport

在此身份验证模式中,客户端使用用户名令牌进行身份验证,此证书作为经过签名的支持令牌(即签署消息签名的令牌)显示在 SOAP 层上。在传输层,服务是用 X.509 证书进行身份验证的。安全绑定元素是由 CreateUserNameOverTransportBindingElement 方法返回的 TransportSecurityBindingElement。或者,将 authenticationMode 属性设置为 UserNameOverTransport

另请参见

任务

如何:为指定的身份验证模式创建 SecurityBindingElement

参考

SecurityBindingElement