如何:设置安全模式

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

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

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

在代码中设置安全模式

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

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

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

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

  3. 此外,还可以在绑定的构造函数中设置模式,如下面的代码所示。

设置 ClientCredentialType 属性

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

针对传输模式设置 ClientCredentialType 属性

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

  2. Mode 属性设置为 Transport

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

针对消息模式设置 ClientCredentialType 属性

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

  2. Mode 属性设置为 Message

  3. ClientCredential 属性设置为适当的值。下面的代码将该属性设置为 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>