如何:设置安全模式
Windows Communication Foundation (WCF) 安全有三个常用安全模式:传输、消息和“使用消息凭据的传输”,这三种模式存在于大多数预定义绑定中。另外,还有两种特定于两个绑定的模式:BasicHttpBinding 上的“transport-credential only”模式和 NetMsmqBinding 上的“Both”模式。不过,本主题主要讨论三种常见安全模式:Transport、Message 和 TransportWithMessageCredential。
请注意,并非所有预定义绑定都支持所有这些模式。本主题使用 WSHttpBinding 和 NetTcpBinding 类来设置模式,并演示如何以编程方式来设置安全模式,如何通过配置来设置安全模式。
有关 WCF 安全的更多信息,请参见安全性概述、保证服务的安全 和 保护服务和客户端的安全。有关传输模式和消息模式的更多信息,请参见传输安全和 WCF 中的消息安全。
在代码中设置安全模式
创建要使用的绑定类的一个实例。有关预定义绑定的列表,请参见系统提供的绑定。此示例创建 WSHttpBinding 类的一个实例。
设置 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;
此外,还可以在绑定的构造函数中设置模式,如下面的代码所示。
Dim b As New WSHttpBinding(SecurityMode.Message)
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
设置 ClientCredentialType 属性
将模式设置为三个值之一,就确定了 ClientCredentialType 属性的设置方式。例如,使用 WSHttpBinding 类将模式设置为 Transport,意味着必须将 HttpTransportSecurity 类的 ClientCredentialType 属性设置为相应的值。
针对传输模式设置 ClientCredentialType 属性
创建绑定的一个实例。
将 Mode 属性设置为 Transport。
将 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 属性
创建绑定的一个实例。
将 Mode 属性设置为 Message。
将 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 属性
向配置文件的 <bindings> 元素添加一个适当的绑定元素。下面的示例添加了一个 <wsHttpBinding> 元素。
添加一个
<binding>
元素,并将其 name 属性设置为适当的值。添加一个
<security>
元素,并将 mode 属性设置为 Message、Transport 或 TransportWithMessageCredential。如果模式设置为 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 证书配置端口
如何:使用传输安全和消息凭据
概念
其他资源
传输安全
<security> of <wsHttpBinding>
<security> of <basicHttpBinding>
<security> of <netTcpBinding>