Windows Communication Foundation (WCF) 安全性分为三个主要功能领域:传输安全性、访问控制和审核。 传输安全性提供完整性、机密性和身份验证。 传输安全性由以下项之一提供:传输安全、消息安全或 TransportWithMessageCredential
。
有关 WCF 消息安全性的概述,请参阅 安全概述。 有关其他两个 WCF 安全性部分的详细信息,请参阅 授权 和 审核。
传输安全方案
采用 WCF 传输安全性的常见方案包括:
使用 Windows 进行安全传输。 WCF 客户端和服务部署在 Windows 域(或 Windows 林)中。 消息包含个人数据,因此要求包括客户端和服务相互身份验证、消息完整性和消息保密性。 此外,需要证明发生特定事务,例如,消息接收方应记录签名信息。
使用
UserName
和 HTTPS 进行安全传输。 需要开发 WCF 客户端和服务才能跨 Internet 工作。 客户端凭据根据数据库(其中的内容为用户名/密码对)进行身份验证。 该服务使用受信任的安全套接字层 (SSL) 证书在 HTTPS 地址部署。 由于消息通过 Internet 传输,因此需要对客户端和服务进行相互身份验证,并且必须在传输期间保留消息的机密性和完整性。使用证书进行安全传输。 需要开发 WCF 客户端和服务才能通过公共 Internet 工作。 客户端和服务都具有可用于保护消息的证书。 客户端和服务使用 Internet 相互通信,并执行需要消息完整性、机密性和相互身份验证的高价值事务。
完整性、机密性和身份验证
三个功能(完整性、机密性和身份验证)共同称为传输安全性。 传输安全性提供有助于缓解对分布式应用程序的威胁的功能。 下表简要描述了构成传输安全性的三个函数。
功能 | DESCRIPTION |
---|---|
完整性 | 完整性 是保证数据完整且准确,尤其是在数据从一个点遍历到另一个点之后,并且可能由许多执行组件读取。 必须保持完整性以防止篡改数据,通常通过对消息进行数字签名来实现。 |
机密性 | 保密 性是保证除预期读者以外的任何人未阅读邮件。 例如,信用卡号必须保密,因为它是通过 Internet 发送的。 机密性通常由使用公钥/私钥方案的数据加密提供。 |
身份验证 | 身份验证 是对已声明标识的验证。 例如,使用银行帐户时,必须只允许该帐户的实际所有者提取资金。 可以通过各种方式提供身份验证。 一种常见方法是用户/密码系统。 第二种是使用由第三方提供的 X.509 证书。 |
安全模式
WCF 具有多种传输安全性模式,如下表所述。
模式 | DESCRIPTION |
---|---|
没有 | 传输层或消息层不提供任何安全性。 默认情况下,预定义的绑定都不使用此模式,只有 <basicHttpBinding> 元素(使用代码时为 BasicHttpBinding 类)例外。 |
运输 | 使用安全传输(例如 HTTPS)进行完整性、机密性和相互身份验证。 |
消息 | 使用 SOAP 消息安全保障完整性、机密性和相互认证。 SOAP 消息根据 WS-Security 标准进行保护。 |
混合模式 | 使用传输安全来确保完整性、保密性和服务器身份验证。 使用消息安全性(WS-Security 和其他标准)进行客户端身份验证。 (此模式的此枚举为 TransportWithMessageCredential .) |
两者 | 在两个级别执行保护和身份验证。 此模式仅在 <netMsmqBinding> 元素中可用。 |
凭据和传输安全性
凭据是用于建立声称的身份或能力的数据。 提交凭据涉及出示数据以及数据的所有权证明。 WCF 支持传输和消息安全级别的各种凭据类型。 您可以为 WCF 绑定指定一种凭据类型。
在许多国家或地区,驾驶执照是凭据的一个示例。 许可证包含表示其标识和功能的数据。 它以拥有者图片的形式包含所有权证明。 许可证由受信任的颁发机构颁发,通常是政府许可部门。 许可证已密封,可以包含全息影像,显示它未被篡改或伪造。
例如,请考虑 WCF 中支持的两种类型的凭据:用户名和 (X.509) 证书凭据。
对于用户名凭据,用户名表示声明的标识,密码将显示所有权证明。 在这种情况下,受信任的权威是验证用户名和密码的系统。
在证书凭据中,使用者名称、使用者可选名称或证书中的特定字段可用于表示声明的标识和/或功能。 通过使用关联的私钥生成签名来建立凭据中数据的所有权证明。
有关编程传输安全性和指定凭据的详细信息,请参阅绑定和安全行为。
传送客户端凭据类型
下表显示了创建使用传输安全性的应用程序时使用的可能值。 可以在代码或绑定设置中使用这些值。
设置 | DESCRIPTION |
---|---|
没有 | 指定客户端不需要提供任何凭据。 这相当于匿名客户端。 |
基本 | 指定基本身份验证。 有关详细信息,请参阅RFC2617“HTTP 身份验证:基本身份验证和摘要式身份验证”。 |
摘要 | 指定摘要式身份验证。 有关详细信息,请参阅RFC2617“HTTP 身份验证:基本身份验证和摘要式身份验证”。 |
Ntlm | 指定在 Windows 域中使用 SSPI 协商进行 Windows 身份验证。 SSPI 协商的结果是使用 Kerberos 协议或 NT LanMan(NTLM)。 |
Windows操作系统 | 指定在 Windows 域中使用 SSPI 进行 Windows 身份验证。 SSPI 选择使用 Kerberos 协议或 NTLM 作为身份验证服务。 SSPI 首先尝试 Kerberos 协议;如果失败,则使用 NTLM。 |
证书 | 使用证书(通常是 X.509)执行客户端身份验证。 |
消息客户端凭据类型
下表显示了创建使用消息安全性的应用程序时使用的可能值。 可以在代码或绑定设置中使用这些值。
设置 | DESCRIPTION |
---|---|
没有 | 允许服务与匿名客户端交互。 |
Windows操作系统 | 允许在经过 Windows 凭据身份验证的上下文中进行 SOAP 消息交换。 使用 SSPI 协商机制,从 Kerberos 协议或 NTLM 中选择身份验证服务。 |
用户名 | 允许服务要求使用用户名凭据对客户端进行身份验证。 请注意,WCF 不允许使用用户名执行任何加密作,例如生成签名或加密数据。 因此,WCF 强制在使用用户名凭据时保护传输。 |
证书 | 允许服务要求使用证书对客户端进行身份验证。 |
CardSpace | 允许服务要求使用 CardSpace 对客户端进行身份验证。 |
编程资质
对于每个客户端凭据类型,WCF 编程模型允许你通过使用服务行为和通道行为来指定凭据值和凭据验证程序。
WCF 安全性有两种凭据类型:服务凭据行为和通道凭据行为。 WCF 中的凭据行为指定实际数据,即用于满足通过绑定表示的安全要求的凭据。 在 WCF 中,客户端类是将操作调用转换为消息的运行时的组件。 所有客户端都继承自 ClientBase<TChannel> 该类。 基 ClientCredentials 类上的属性允许指定客户端凭据的各种值。
在 WCF 中,服务行为是应用于实现服务协定(接口)的类的属性,以编程方式控制服务。 类 ServiceCredentials 允许为各种客户端凭据类型指定服务凭据和客户端验证设置的证书。
消息安全协商模型
在消息安全模式中,通过执行传输安全,可以在客户端带外配置服务凭据。 例如,如果使用的是存储在 Windows 证书存储区中的证书,则必须使用一个工具,如 Microsoft 管理控制台 (MMC) 单元。
消息安全模式还允许进行传输安全设置,从而在初始协商中与客户端交换服务凭据。 若要启用协商,请将 NegotiateServiceCredential 属性设置为 true
.