如何:设置安全模式
Windows Communication Foundation (WCF) 安全性在大多数预定义的绑定上有三个常见的安全模式:传输、消息和“带有消息凭据的传输”。两个附加模式特定于两个绑定:在 BasicHttpBinding 上找到的“仅传输凭据”模式以及在 NetMsmqBinding 上找到的“两个”模式。 不过,本主题主要讨论三种常见安全模式:Transport、Message 和 TransportWithMessageCredential。
请注意,并非所有预定义绑定都支持所有这些模式。 本主题使用 WSHttpBinding 和 NetTcpBinding 类来设置模式,并演示如何以编程方式来设置安全模式,如何通过配置来设置安全模式。
有关详细信息,请参阅 WCF 安全性的安全性概述、保证服务的安全和保护服务和客户端的安全。 有关传输模式和消息的详细信息,请参阅传输安全性和消息安全性。
在代码中设置安全模式
创建要使用的绑定类的一个实例。 有关预定义的绑定的列表,请参阅系统提供的绑定。 此示例创建 WSHttpBinding 类的一个实例。
设置
Mode
属性所返回的对象的Security
属性。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport
或者,设置为消息模式,如下面的代码所示。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message
或者,设置为使用消息凭据的传输模式,如下面的代码所示。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredential
此外,还可以在绑定的构造函数中设置模式,如下面的代码所示。
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Dim b As New WSHttpBinding(SecurityMode.Message)
设置 ClientCredentialType 属性
将模式设置为三个值之一,就确定了 ClientCredentialType
属性的设置方式。 例如,使用 WSHttpBinding 类将模式设置为 Transport
,意味着必须将 ClientCredentialType 类的 HttpTransportSecurity 属性设置为相应的值。
针对传输模式设置 ClientCredentialType 属性
创建绑定的一个实例。
将
Mode
属性设置为Transport
。将
ClientCredential
属性设置为适当的值。 下面的代码将该属性设置为Windows
。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
针对消息模式设置 ClientCredentialType 属性
创建绑定的一个实例。
将
Mode
属性设置为Message
。将
ClientCredential
属性设置为适当的值。 下面的代码将该属性设置为Certificate
。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Dim b As 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"
,并将clientCredentialType
元素的<transport>
属性设置为 "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)。 因此,对任何传输安全对象(例如 ClientCredentialType
)的 HttpTransportSecurity 属性进行的设置都将被忽略。 换言之,只能设置消息安全对象(对于 ClientCredentialType
绑定,则是 WSHttpBinding
对象)的 NonDualMessageSecurityOverHttp。
有关详细信息,请参阅如何:使用传输安全性和消息凭据。