Windows Communication Foundation (WCF) 是一个基于 SOAP 消息的分布式编程平台,因此保护客户端和服务之间的消息安全对于保护数据非常重要。WCF 基于现有安全性基础结构和 SOAP 消息的经验证的安全标准提供可互操作的安全消息交换通用平台。
当您使用现有技术(如 HTTPS)、Windows 集成安全性或对用户进行身份验证的用户名和密码生成安全的分布式应用程序时,WCF 将使用熟悉的概念。WCF 不仅与现有安全性基础结构集成,而且还通过使用安全 SOAP 消息将分布式安全性扩展到仅 Windows 域的范围之外。可以将 WCF 视为现有安全机制的一个实现,该安全机制具有将 SOAP 用作现有协议的补充协议的主要优点。例如,用于标识客户端或服务的凭据(如用户名和密码或 X.509 证书)具有可互操作的基于 XML 的 SOAP 配置文件。使用这些配置文件时,消息利用开放式规范(如 XML 数字签名和 XML 加密)进行安全交换。有关规范的列表,请参见系统提供的互操作性绑定支持的 Web 服务协议。
另一个并列项是 Windows 平台上的组件对象模型 (COM),它可实现安全的分布式应用程序。COM 具有全面的安全机制,因此安全上下文可以在各组件间流动;此机制可强制实现完整性、保密性和身份验证。但是,COM 无法像 WCF 一样实现跨平台的安全消息传递。通过使用 WCF,您可以在 Internet 范围内跨多个 Windows 域生成服务和客户端。WCF 的可互操作消息对于生成动态业务驱动型服务至关重要,这有助于确保信息的安全性。
WCF 是一个基于 SOAP 消息的分布式编程平台。通过使用 WCF,您可以创建可用作服务和服务客户端的应用程序,从无限数量的其他服务和客户端创建和处理消息。在此类分布式应用程序中,消息可以从一个节点流向另一个节点,并在通过防火墙进入 Internet 后再通过无数个 SOAP 中间项。这会带来各种不同的消息安全性威胁。下面的示例演示在实体间交换消息时可由 WCF 安全性帮助缓解的部分常见威胁:
总的来说,传输安全性可提供下列保障:
通常,Web 服务部署都具有现成的安全性解决方案,例如,安全套接字层 (SSL) 或 Kerberos 协议。某些服务则利用已部署的安全性基础结构,例如,使用 Active Directory 的 Windows 域。当评估和采用新服务时,通常需要与这些现有技术集成。
WCF 安全性与现有传输安全模型集成,并且可对基于 SOAP 消息安全的新传输安全模型使用现有基础结构。
任何通信安全模型的一个重要组成部分就是能够识别正在通信的实体并对其进行身份验证。这些通信中的实体使用“数字标识”或凭据向通信对等方验证自己的身份。随着分布式通信平台的发展,已实现多种不同的凭据身份验证和相关的安全模型。例如,在 Internet 中,通常使用用户名和密码标识用户。在 Intranet 中,使用 Kerberos 域控制器备份用户和服务身份验证变得越来越普遍。在某些特定情况下,例如两个业务合作伙伴之间,证书可用于对合作伙伴的身份进行相互验证。
因此,在 Web 服务领域中,同样的服务可向内部企业客户公开,也可向外部合作伙伴或 Internet 客户公开,重要的是基础结构可提供与这些现有安全身份验证模型的集成。WCF 安全性支持多种凭据类型(身份验证模型),其中包括:
在具有大量现有部署的环境中,很少会出现同质化现象。分布式计算/通信平台需要与不同供应商提供的技术进行互操作。同样地,安全性也必须能够互操作。
为了实现可互操作的安全系统,活跃在 Web 服务行业的公司编写了多种不同的标准。具体到安全性,它们提出了几个著名的标准:WS-Security:SOAP 消息安全(由 OASIS 标准组织采用,以前称为 WS-Security)、WS-Trust、WS-SecureConversation 和 WS-SecurityPolicy。
WCF 支持各种不同的互操作方案。BasicHttpBinding 类可支持基本安全配置文件 (BSP),而 WSHttpBinding 类则支持最新的安全标准,例如 WS-Security 1.1 和 WS-SecureConversation。通过遵循这些标准,WCF 安全性可与除 Microsoft Windows 之外的操作系统和平台上承载的 Web 服务进行互操作和集成。
WCF 安全性可分为三方面功能:传输安全性、访问控制和审核。以下几部分简要讨论这些功能并提供指向更多信息的链接。
传输安全性包含三项主要安全功能:完整性、保密性和身份验证。完整性就是检测消息是否已被篡改的能力。机密性就是保证除预期接收方之外的其他人员都无法读取某个消息;这可以通过加密技术实现。身份验证就是验证已声明标识的能力。将这三项功能结合在一起,有助于确保消息安全地从一个点到达另一个点。
在 WCF 中,两个可用于实现传输安全性的主要机制分别为:传输安全模式和消息安全模式。
有关 这些差别的更多信息,请参见保护服务和客户端的安全。
第三种安全模式同时使用前两种模式,并具备这两种模式的优点。此模式称为 TransportWithMessageCredential。在此模式下,消息安全性用于对客户端进行身份验证,而传输安全性则用于对服务器进行身份验证并提供消息机密性和完整性。得益于这一特点,TransportWithMessageCredential 安全模式几乎与传输安全模式一样快,并且提供与消息安全性一样的客户端身份验证可扩展性。但是,与消息安全性模式不同,它不提供完整的端到端安全性。
访问控制也称为身份验证。身份验证使得不同的用户可以具有不同的数据查看权限。例如,因为公司的人力资源文件包含敏感的员工数据,只有管理人员才能查看员工数据。此外,管理人员只能查看他们的直接报告数据。在此情况下,访问控制将基于角色(“管理人员”)和管理人员的特定标识(以避免管理人员查看其他管理人员的员工记录)。
在 WCF 中,访问控制功能通过与公共语言运行库 (CLR) PrincipalPermissionAttribute 以及一组称为“标识模型”的 API 集成提供。有关访问控制和基于声明的授权的详细信息,请参见扩展安全性。
审核就是将安全事件记录到 Windows 事件日志中。您可以记录与安全相关的事件,例如身份验证失败(或成功)。有关更多信息,请参见 审核安全事件. 有关编程的详细信息,请参见如何:审核 Windows Communication Foundation 安全事件。