Windows Communication Foundation(WCF)随附的系统提供的绑定提供了一种快速编程 WCF 应用程序的方法。 除了一个例外,所有绑定都启用了默认安全方案。 本主题可帮助你根据安全需求选择合适的绑定。
有关 WCF 安全性的概述,请参阅 安全概述。 有关使用绑定对 WCF 进行编程的详细信息,请参阅 WCF 安全性编程。
如果已选择绑定,可以了解有关与 安全行为安全性关联的运行时行为的详细信息。
某些安全功能不可使用系统提供的绑定进行编程。 有关使用自定义绑定的更多控件,请参阅 具有自定义绑定的安全功能。
绑定的安全功能
WCF 提供许多系统绑定,可以满足大多数需求。 如果特定绑定不足够,还可以创建自定义绑定。 有关系统提供的绑定的列表,请参阅 System-Provided 绑定。 有关自定义绑定的详细信息,请参阅 自定义绑定。
WCF 中的每个绑定都有两种形式:作为 API 和配置文件中使用的 XML 元素。 例如,WSHttpBinding
(API)在 <wsHttpBinding> 中有一个对应项。
以下部分列出了每个绑定的两种表单,并汇总了安全功能。
BasicHttp
在代码中使用 BasicHttpBinding 类,在配置中使用 <basicHttpBinding>。
此绑定旨在用于一系列现有技术,包括:
ASP.NET Web 服务(ASMX),版本 1。
Web Service Enhancements (WSE) 应用程序。
Web 服务互操作性 (WS-I) 规范中定义的基本配置文件 (https://go.microsoft.com/fwlink/?LinkId=38955)。
WS-I 中定义的基本安全配置文件。
默认情况下,此绑定不安全。 它旨在与 ASMX 服务进行互作。 启用安全性后,绑定旨在与 Internet Information Services (IIS) 安全机制(例如基本身份验证、摘要和集成 Windows 安全性)进行无缝互作。 有关详细信息,请参阅 传输安全概述。 此绑定支持以下各项:
HTTPS 传输安全性。
HTTP 基本身份验证。
WS-Security。
有关详细信息,请参阅BasicHttpSecurity, BasicHttpMessageSecurity, BasicHttpMessageCredentialType和BasicHttpSecurityMode.
WSHttpBinding(用于WCF框架中的安全HTTP通信绑定)
在代码中使用WSHttpBinding类。在配置中,使用<wsHttpBinding>。
默认情况下,此绑定实现 WS-Security 规范,并提供与实现 WS-* 规范的服务的互作性。 它支持以下各项:
HTTPS 传输安全性。
WS-Security。
使用 HTTPS 传输保护和 SOAP 消息凭据安全性来对调用方进行身份验证。
有关更多信息,请参阅 WSHttpSecurity、MessageSecurityOverHttpMessageCredentialTypeSecurityMode、HttpTransportSecurity、HttpClientCredentialType 和 HttpProxyCredentialType。
WSDualHttpBinding
在代码中使用 WSDualHttpBinding 类,在配置中,使用 <wsDualHttpBinding>。
此绑定旨在启用双向通信服务应用程序。 此绑定实现基于消息的传输安全性的 WS-Security 规范。 传输安全不可用。 默认情况下,它提供以下功能:
实现 WS-Reliable 消息传送以实现可靠性。
实现 WS-Security 以保证传送安全和身份验证。
使用 HTTP 传递消息。
使用文本/XML 消息编码。
使用 WS-Security(消息层安全性),绑定允许配置以下参数:
用于确定加密算法的安全算法套件。
下列功能的绑定选项:
提供可在客户端带外使用的服务凭据。
提供从服务协商的服务凭据作为通道设置的一部分。
有关详细信息,请参阅 WSDualHttpSecurity 和 WSDualHttpSecurityMode。
NetTcpBinding
在代码中使用NetTcpBinding类;在配置中,使用<netTcpBinding>。
此绑定已针对跨计算机通信进行优化。 默认情况下,它具有以下特征:
实现传输层安全性。
利用 Windows 安全性进行传输安全和身份验证。
使用 TCP 进行传输。
实现二进制消息编码。
实现 WS-Reliable Messaging。
选项包括:
消息层安全性(使用 WS-Security)。
传输安全性通过消息凭据实现:传输层安全性 (TLS) 通过 TCP 提供机密性和完整性,以及 WS-Security 提供授权凭据。
有关更多信息,请参阅 NetTcpSecurity、TcpTransportSecurityTcpClientCredentialType、MessageSecurityOverTcp 和 MessageCredentialType。
NetNamedPipeBinding
在代码中使用 NetNamedPipeBinding 类;在配置中,使用 <netNamedPipeBinding>。
此绑定针对跨进程通信(通常在同一台计算机上)进行了优化。 默认情况下,此绑定具有以下特征:
使用传输安全性进行消息传输和身份验证。
使用命名管道传送消息。
实现二进制消息编码。
加密和消息签名。
选项包括:
- 使用 Windows 安全性进行身份验证。
有关详细信息,请参阅NetNamedPipeSecurity、NetNamedPipeSecurityMode和NamedPipeTransportSecurity。
MsmqIntegrationBinding
在代码中使用 MsmqIntegrationBinding 类;在配置中,使用 <msmqIntegrationBinding>。
此绑定针对创建与非 WCF 的 Microsoft 消息队列 (MSMQ) 终结点互操作的 WCF 客户端和服务进行了优化。
默认情况下,此绑定使用传输安全性并提供以下安全特征:
可以将安全性禁用(设置为“无”)。
MSMQ 传输安全性 (Transport)。
有关详细信息,请参阅 NetMsmqSecurity 和 NetMsmqSecurityMode。
NetMsmqBinding
在代码中使用 NetMsmqBinding 类;在配置中,使用 <netMsmqBinding>。
此绑定用于创建需要 MSMQ 排队消息支持的 WCF 服务。
默认情况下,此绑定使用传输安全性并提供以下安全特征:
可以将安全性禁用(设置为“无”)。
MSMQ 传输安全性 (Transport)。
基于 SOAP 的消息安全性 (Message)。
同时启用传输安全性和消息安全性 (Both)。
支持的客户端凭据类型:None、Windows、UserName、Certificate、IssuedToken。
Certificate凭据仅在安全模式设置为Both或Message时才支持。
有关详细信息,请参阅 MessageSecurityOverMsmq 和 MsmqTransportSecurity。
WSFederationHttpBinding
在代码中使用 WSFederationHttpBinding 类,在配置中使用 <wsFederationHttpBinding>。
默认情况下,此绑定使用 WS-Security(消息层安全性)。
有关详细信息,请参阅联合身份验证WSFederationHttpSecurity 和 WSFederationHttpSecurityMode。
自定义绑定
如果系统提供的绑定都不符合要求,则可以使用自定义安全绑定元素创建自定义绑定。 有关详细信息,请参阅使用自定义绑定的安全功能。
绑定选择
下表总结了安全模式设置中提供的功能,即列出在安全模式设置为 Transport
、 Message
或 TransportWithMessageCredential
时可用的功能。 使用此表可帮助你找到应用程序所需的安全功能。
设置 | 特点 |
---|---|
运输 | 服务器身份验证 客户端身份验证 点到点安全性 互操作性 硬件加速 高吞吐量 安全防火墙 高延迟应用程序 跨越多个跃点重新加密 |
消息 | 服务器身份验证 客户端身份验证 端到端安全性 互操作性 丰富的声明 联邦 多重身份验证 自定义令牌 公证/时间戳服务 高延迟应用程序 消息签名的持久性 |
TransportWithMessageCredential | 服务器身份验证 客户端身份验证 点到点安全性 互操作性 硬件加速 高吞吐量 丰富的客户端声明 联邦 多重身份验证 自定义令牌 安全防火墙 高延迟应用程序 跨越多个跃点重新加密 |
下表列出了支持各种模式设置的绑定。 从表中选择要用于创建服务终结点的绑定。
捆绑 | 传输模式支持 | 消息模式支持 | 是否支持 TransportWithMessageCredential |
---|---|---|---|
BasicHttpBinding |
是的 | 是的 | 是的 |
WSHttpBinding |
是的 | 是的 | 是的 |
WSDualHttpBinding |
否 | 是的 | 否 |
NetTcpBinding |
是的 | 是的 | 是的 |
NetNamedPipeBinding |
是的 | 否 | 否 |
NetMsmqBinding |
是的 | 是的 | 否 |
MsmqIntegrationBinding |
是的 | 否 | 否 |
wsFederationHttpBinding |
否 | 是的 | 是的 |
绑定中的传输凭据
下表列出了在传输安全模式下使用 BasicHttpBinding
或 WSHttpBinding
时可用的客户端凭据类型。
类型 | DESCRIPTION |
---|---|
没有 | 指定客户端不需要提供任何凭据。 这相当于匿名客户端。 |
基本 | 基本身份验证。 有关详细信息,请参阅 RFC 2617 – HTTP 身份验证:基本身份验证和摘要式身份验证,可在以下位置获取 https://go.microsoft.com/fwlink/?LinkId=84023。 |
摘要 | 摘要式身份验证。 有关详细信息,请参阅 RFC 2617 – HTTP 身份验证:基本身份验证和摘要式身份验证,可在以下位置获取 https://go.microsoft.com/fwlink/?LinkId=84023。 |
NTLM | NT LAN 管理器 (NTLM) 身份验证。 |
Windows操作系统 | Windows 身份验证。 |
证书 | 使用证书执行的身份验证。 |
IssuedToken | 允许服务要求使用安全令牌服务或 CardSpace 颁发的令牌对客户端进行身份验证。 有关详细信息,请参阅联合身份验证和颁发的标记。 |
绑定中的消息客户端凭据
下表列出了在消息安全模式下使用绑定时可用的客户端凭据类型。
类型 | DESCRIPTION |
---|---|
没有 | 允许服务与匿名客户端交互。 |
Windows操作系统 | 允许在经过身份验证的 Windows 凭据上下文下进行 SOAP 消息交换。 |
UserName | 允许服务要求使用用户名凭据对客户端进行身份验证。 请注意,如果安全模式设置为 TransportWithMessageCredential ,WCF 不支持使用密码发送密码摘要或派生密钥,也不支持使用此类密钥进行消息模式安全性。 因此,WCF 强制在使用用户名凭据时保护传输。 |
证书 | 允许服务要求使用证书对客户端进行身份验证。 |
IssuedToken | 允许服务使用安全令牌服务提供自定义令牌。 |