SecurityBindingElement 身份验证模式

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

有关将元素用于其中一种身份验证模式的示例,请参阅如何:为指定的身份验证模式创建 SecurityBindingElement

基本配置编程

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

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

  1. <customBinding> 添加到 <bindings> 元素中。

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

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

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

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

以编程方式设置模式

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

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

    SymmetricSecurityBindingElement b =
        SecurityBindingElement.
        CreateAnonymousForCertificateBindingElement();
    
    Dim b As SymmetricSecurityBindingElement = _
    SecurityBindingElement.CreateAnonymousForCertificateBindingElement()
    
  3. 使用绑定元素创建自定义绑定。 有关详细信息,请参阅自定义绑定

模式说明

AnonymousForCertificate

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

AnonymousForSslNegotiated

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

CertificateOverTransport

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

IssuedToken

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

IssuedTokenForCertificate

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

IssuedTokenForSslNegotiated

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

IssuedTokenOverTransport

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

Kerberos

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

备注

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

备注

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

KerberosOverTransport

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

备注

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

MutualCertificate

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

MutualCertificateDuplex

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

MutualSslNegotiated

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

SecureConversation

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

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

SspiNegotiation

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

SspiNegotiatedOverTransport

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

UserNameForCertificate

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

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

UserNameForSslNegotiated

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

UserNameOverTransport

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

请参阅