如何:设置安全模式

Windows Communication Foundation (WCF) 安全有三个常用安全模式:传输、消息和“使用消息凭据的传输”,这三种模式存在于大多数预定义绑定中。另外,还有两种特定于两个绑定的模式:BasicHttpBinding 上的“transport-credential only”模式和 NetMsmqBinding 上的“Both”模式。不过,本主题主要讨论三种常见安全模式:TransportMessageTransportWithMessageCredential

请注意,并非所有预定义绑定都支持所有这些模式。本主题使用 WSHttpBindingNetTcpBinding 类来设置模式,并演示如何以编程方式来设置安全模式,如何通过配置来设置安全模式。

有关 WCF 安全的更多信息,请参见安全性概述保证服务的安全保护服务和客户端的安全。有关传输模式和消息模式的更多信息,请参见传输安全WCF 中的消息安全

在代码中设置安全模式

  1. 创建要使用的绑定类的一个实例。有关预定义绑定的列表,请参见系统提供的绑定。此示例创建 WSHttpBinding 类的一个实例。

  2. 设置 Security 属性所返回的对象的 Mode 属性。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    

    或者,设置为消息模式,如下面的代码所示。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    

    或者,设置为使用消息凭据的传输模式,如下面的代码所示。

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
  3. 此外,还可以在绑定的构造函数中设置模式,如下面的代码所示。

    Dim b As New WSHttpBinding(SecurityMode.Message)
    
    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    

设置 ClientCredentialType 属性

将模式设置为三个值之一,就确定了 ClientCredentialType 属性的设置方式。例如,使用 WSHttpBinding 类将模式设置为 Transport,意味着必须将 HttpTransportSecurity 类的 ClientCredentialType 属性设置为相应的值。

针对传输模式设置 ClientCredentialType 属性

  1. 创建绑定的一个实例。

  2. Mode 属性设置为 Transport

  3. ClientCredential 属性设置为适当的值。下面的代码将该属性设置为 Windows

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    

针对消息模式设置 ClientCredentialType 属性

  1. 创建绑定的一个实例。

  2. Mode 属性设置为 Message

  3. ClientCredential 属性设置为适当的值。下面的代码将该属性设置为 Certificate

    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    
    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    

在配置中设置 Mode 和 ClientCredentialType 属性

  1. 向配置文件的 <bindings> 元素添加一个适当的绑定元素。下面的示例添加了一个 <wsHttpBinding> 元素。

  2. 添加一个 <binding> 元素,并将其 name 属性设置为适当的值。

  3. 添加一个 <security> 元素,并将 mode 属性设置为 MessageTransportTransportWithMessageCredential

  4. 如果模式设置为 Transport,则添加一个 <transport> 元素,并将 clientCredential 属性设置为适当的值。

    下面的示例将模式设置为 "Transport",并将 <transport> 元素的 clientCredentialType 属性设置为 "Windows"

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" />
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    或者,将 security mode 设置为 "Message",后接一个 <"message"> 元素。本示例将 clientCredentialType 设置为 "Certificate"

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" />
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    使用 TransportWithMessageCredential 值是一种特殊情况,下面将进行说明。

使用 TransportWithMessageCredential

在将安全模式设置为 TransportWithMessageCredential 时,传输会确定实际提供传输级安全的机制。例如,HTTP 协议使用基于 HTTP 的安全套接字层 (SSL)(SSL over HTPP,或 HTTPS)。因此,对任何传输安全对象(例如 HttpTransportSecurity)的 ClientCredentialType 属性进行的设置都将被忽略。换言之,只能设置消息安全对象(对于 WSHttpBinding 绑定,则是 NonDualMessageSecurityOverHttp 对象)的 ClientCredentialType

有关更多信息,请参见 如何:使用传输安全和消息凭据.

另请参见

任务

如何:使用 SSL 证书配置端口
如何:使用传输安全和消息凭据

概念

WCF 中的消息安全
安全性概述
系统提供的绑定

其他资源

传输安全
<security> of <wsHttpBinding>
<security> of <basicHttpBinding>
<security> of <netTcpBinding>