绑定与安全

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, BasicHttpMessageCredentialTypeBasicHttpSecurityMode.

WSHttpBinding(用于WCF框架中的安全HTTP通信绑定)

在代码中使用WSHttpBinding类。在配置中,使用<wsHttpBinding>

默认情况下,此绑定实现 WS-Security 规范,并提供与实现 WS-* 规范的服务的互作性。 它支持以下各项:

  • HTTPS 传输安全性。

  • WS-Security。

  • 使用 HTTPS 传输保护和 SOAP 消息凭据安全性来对调用方进行身份验证。

有关更多信息,请参阅 WSHttpSecurityMessageSecurityOverHttpMessageCredentialTypeSecurityModeHttpTransportSecurityHttpClientCredentialTypeHttpProxyCredentialType

WSDualHttpBinding

在代码中使用 WSDualHttpBinding 类,在配置中,使用 <wsDualHttpBinding>

此绑定旨在启用双向通信服务应用程序。 此绑定实现基于消息的传输安全性的 WS-Security 规范。 传输安全不可用。 默认情况下,它提供以下功能:

  • 实现 WS-Reliable 消息传送以实现可靠性。

  • 实现 WS-Security 以保证传送安全和身份验证。

  • 使用 HTTP 传递消息。

  • 使用文本/XML 消息编码。

使用 WS-Security(消息层安全性),绑定允许配置以下参数:

  • 用于确定加密算法的安全算法套件。

  • 下列功能的绑定选项:

    • 提供可在客户端带外使用的服务凭据。

    • 提供从服务协商的服务凭据作为通道设置的一部分。

有关详细信息,请参阅 WSDualHttpSecurityWSDualHttpSecurityMode

NetTcpBinding

在代码中使用NetTcpBinding类;在配置中,使用<netTcpBinding>

此绑定已针对跨计算机通信进行优化。 默认情况下,它具有以下特征:

  • 实现传输层安全性。

  • 利用 Windows 安全性进行传输安全和身份验证。

  • 使用 TCP 进行传输。

  • 实现二进制消息编码。

  • 实现 WS-Reliable Messaging。

选项包括:

  • 消息层安全性(使用 WS-Security)。

  • 传输安全性通过消息凭据实现:传输层安全性 (TLS) 通过 TCP 提供机密性和完整性,以及 WS-Security 提供授权凭据。

有关更多信息,请参阅 NetTcpSecurityTcpTransportSecurityTcpClientCredentialTypeMessageSecurityOverTcpMessageCredentialType

NetNamedPipeBinding

在代码中使用 NetNamedPipeBinding 类;在配置中,使用 <netNamedPipeBinding>

此绑定针对跨进程通信(通常在同一台计算机上)进行了优化。 默认情况下,此绑定具有以下特征:

  • 使用传输安全性进行消息传输和身份验证。

  • 使用命名管道传送消息。

  • 实现二进制消息编码。

  • 加密和消息签名。

选项包括:

  • 使用 Windows 安全性进行身份验证。

有关详细信息,请参阅NetNamedPipeSecurityNetNamedPipeSecurityModeNamedPipeTransportSecurity

MsmqIntegrationBinding

在代码中使用 MsmqIntegrationBinding 类;在配置中,使用 <msmqIntegrationBinding>

此绑定针对创建与非 WCF 的 Microsoft 消息队列 (MSMQ) 终结点互操作的 WCF 客户端和服务进行了优化。

默认情况下,此绑定使用传输安全性并提供以下安全特征:

  • 可以将安全性禁用(设置为“无”)。

  • MSMQ 传输安全性 (Transport)。

有关详细信息,请参阅 NetMsmqSecurityNetMsmqSecurityMode

NetMsmqBinding

在代码中使用 NetMsmqBinding 类;在配置中,使用 <netMsmqBinding>

此绑定用于创建需要 MSMQ 排队消息支持的 WCF 服务。

默认情况下,此绑定使用传输安全性并提供以下安全特征:

  • 可以将安全性禁用(设置为“无”)。

  • MSMQ 传输安全性 (Transport)。

  • 基于 SOAP 的消息安全性 (Message)。

  • 同时启用传输安全性和消息安全性 (Both)。

  • 支持的客户端凭据类型:None、Windows、UserName、Certificate、IssuedToken。

Certificate凭据仅在安全模式设置为BothMessage时才支持。

有关详细信息,请参阅 MessageSecurityOverMsmqMsmqTransportSecurity

WSFederationHttpBinding

在代码中使用 WSFederationHttpBinding 类,在配置中使用 <wsFederationHttpBinding>

默认情况下,此绑定使用 WS-Security(消息层安全性)。

有关详细信息,请参阅联合身份验证WSFederationHttpSecurityWSFederationHttpSecurityMode

自定义绑定

如果系统提供的绑定都不符合要求,则可以使用自定义安全绑定元素创建自定义绑定。 有关详细信息,请参阅使用自定义绑定的安全功能

绑定选择

下表总结了安全模式设置中提供的功能,即列出在安全模式设置为 TransportMessageTransportWithMessageCredential时可用的功能。 使用此表可帮助你找到应用程序所需的安全功能。

设置 特点
运输 服务器身份验证

客户端身份验证

点到点安全性

互操作性

硬件加速

高吞吐量

安全防火墙

高延迟应用程序

跨越多个跃点重新加密
消息 服务器身份验证

客户端身份验证

端到端安全性

互操作性

丰富的声明

联邦

多重身份验证

自定义令牌

公证/时间戳服务

高延迟应用程序

消息签名的持久性
TransportWithMessageCredential 服务器身份验证

客户端身份验证

点到点安全性

互操作性

硬件加速

高吞吐量

丰富的客户端声明

联邦

多重身份验证

自定义令牌

安全防火墙

高延迟应用程序

跨越多个跃点重新加密

下表列出了支持各种模式设置的绑定。 从表中选择要用于创建服务终结点的绑定。

捆绑 传输模式支持 消息模式支持 是否支持 TransportWithMessageCredential
BasicHttpBinding 是的 是的 是的
WSHttpBinding 是的 是的 是的
WSDualHttpBinding 是的
NetTcpBinding 是的 是的 是的
NetNamedPipeBinding 是的
NetMsmqBinding 是的 是的
MsmqIntegrationBinding 是的
wsFederationHttpBinding 是的 是的

绑定中的传输凭据

下表列出了在传输安全模式下使用 BasicHttpBindingWSHttpBinding 时可用的客户端凭据类型。

类型 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 允许服务使用安全令牌服务提供自定义令牌。

另请参阅