[转贴][WCF Security] 1. 基本概念

出自:http://www.rainsts.net/article.asp?id=472

 

WCF Security 主要包括 "Transfer Security"、"Access Control"、"Auditing" 几个部分。

1. Transfer Security

Transfer Security 主要包括三个方面: "消息完整性(Message Integrity)"、"消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)"。

消息完整性必须确保消息在传输过程中没有被篡改,接收的消息是完整且正确的;消息机密性必须确保消息不会被任何第三方查阅,消息内容不会泄漏给任何非相关人员;而交互认证则是指客户端和服务器必须通过某种信任机制才能建立正确的连接,同时交互认证还要监测并阻止拒绝服务攻击(DOS)。通常的做法是对消息进行数字签名来确保其完整性,使用非对称加密算法来阻止消息内容外泄,而用户名/密码、X.509 数字证书等方式则可以用来验证对方身份。

Security Mode

WCF 提供了 5 种不同的安全方式来实现上述三个安全目标。

  • None: 不采取任何安全措施,仅适合在内部安全环境使用。
  • Transport: 在传输协议级别上对通道的所有通讯进行加密,可使用的通讯协议包括 HTTPS、TCP、IPC 和 MSMQ。优点是应用广泛,多平台支持,实施方便简单,效率极高,适合高吞吐量的服务使用;缺点是只能实现点对点(point-to-point)的消息安全,在使用中介连接(Proxy)时可能会泄漏消息内容,比较适用于于 Intranet 或直接连接的环境。
  • Message: 通过相关标准(如 WS-Security)直接对消息进行加密来达到安全目的。优点是能实现端到端(end-to-end)的安全传输,不存在中介安全隐患,且扩展性较好。因采取工业安全标准,所以整合能力更强,适用于 Internet 服务。缺点是比 Transport 效率要低一些。
  • Mixed(TransportWithMessageCredential): 混合了上面两种方式。使用 Transport 方式完成消息完整性、消息机密性以及服务器认证,而使用 Message 方式完成客户端认证。
  • Both: 使用 Transport 和 Message 共同完成所有的安全过程,比较恐怖,性能低下,只有 NetMsmqBinding 支持这一安全方式。

Bindings and transfer security modes

附:NetTcpBinding、NetNamedPipeBinding 和 NetMsmqBinding 缺省使用 Transport 安全方式,原因是因为它们多用于 Intranet 环境下,相对比较安全。另外 Transport 方式拥有较好的性能,也非常适合内部高性能服务系统使用。BasicHttpBinding 缺省采取 None 方式是为了兼容 ASMX。

我们可以通过编码或者配置文件的方式来指定 Binding 的安全方式。

NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;

app.config

<bindings>
  <netTcpBinding>
    <binding name = "NewBinding0">
      <security mode = "Message" />
    </binding>
  </netTcpBinding>
</bindings>

Credentials

Security Mode 解决了消息的完整性和机密性,那么剩下来的就是 "Authentication" 了。WCF 支持多种认证方式,允许我们从多个 "客户端验证类型(Client Credentials Types)" 中选择适合我们需求的方案,比如经典的 "用户名/密码",或者 "Windows 集成身份认证(NTLM 或 Kerberos)"、"X.509 数字证书" 等。下面两张表展示了不同的绑定类型在不同安全模式下对验证方式的支持情况。

Transport Security and Credentials

Message Security and Credentials

更详细的使用方式,请参考后面的章节。

2. Access Control

Access Control 又被称之为 "Authorization",和 "Authentication" 验证客户端身份的目的不同,它被用来控制用户(组)的代码访问授权。比如说财务相关服务只能被 "会计部" 访问,人事相关服务只能被 "人事部" 和 "董事会" 访问,越权访问会触发 "权限异常"。有关这部分的内容,可以参考我以前写的文章 —— 《.NET 基于角色安全性验证》。

简单点说,"Authentication" 询问 "你是谁?",然后 "Authorization" 会限制你该做什么,不该做什么。

3. Auditing

Auditing 的作用是将 WCF 安全相关事件记录到 "Windows 系统日志" 中。

-----

图表选自《Programming WCF Services》。

时间: 2025-01-26 15:46:42

[转贴][WCF Security] 1. 基本概念的相关文章

WCF分布式开发步步为赢(1):WCF分布式框架基础概念

众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推出了自己的中间件产品,比如Oracle Fusion和 SAP NetWeaver,IBM.BEA等企业也推出了自己基于SOA的解决方案.基于J2EE平台的SOA架构设计中的一个重要概念就是EJB企业服务总线,作用是实现各个系统的数据交互.而.NET平台上,WCF就是微软为各个系统的数据交互提供通讯

WCF security X509证书

1. Transfer Security Transfer Security 主要包括三个方面: "消息完整性(Message Integrity)"."消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)". 消息完整性必须确保消息在传输过程中没有被篡改,接收的消息是完整且正确的:消息机密性必须确保消息不会被任何第三方查阅,消息内容不会泄漏给任何非相关人员:而交互认证则是

WCF Security userName/Password

1. Transfer Security Transfer Security 主要包括三个方面: "消息完整性(Message Integrity)"."消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)". 消息完整性必须确保消息在传输过程中没有被篡改,接收的消息是完整且正确的:消息机密性必须确保消息不会被任何第三方查阅,消息内容不会泄漏给任何非相关人员:而交互认证则是

WCF security 使用Membership provider

1. Transfer Security Transfer Security 主要包括三个方面: "消息完整性(Message Integrity)"."消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)". 消息完整性必须确保消息在传输过程中没有被篡改,接收的消息是完整且正确的:消息机密性必须确保消息不会被任何第三方查阅,消息内容不会泄漏给任何非相关人员:而交互认证则是

WCF分布式开发步步为赢(14):WCF安全编程--基本概念

WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文 章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好 地理解WCF安全相关知识,我把WCF安全机制主要知识点整理为图表.本章以介绍 WCF安全机制的基础概念为主. 要学习WCF安全编程,你应该学习什么首先掌握什么基础知识?很多时候会因 为缺乏系统的安全概念,在进行WCF安全编程开发的时候,遇到很多问题,比如 所证书,这个概念相信很多初学者第一次接触的时候花费了很多时间.我当时在 做WSE安全开发的时候就查

使命必达: 深入剖析WCF的可靠会话[概念篇]

在<实例篇>中,我通过可靠会话成功地进行了美女图片的传输,相信大家在保了眼福之余,会对WCF的可靠会话的功用具有一个深刻的认识.实际上,这涉及到WS中一个重要的概念--可靠消息传输(RM:Reliable Messaging).如果想对可靠会话有一个深入的认识,对可靠消息传输的了解是必须的. 一.可靠消息传输(Reliable Messaging) 我们可以将一个通过WCF构建的分布式应用划分为两个部分,即客户端应用和服务端应用,它们之间的交互方式即采用某种MEP的消息交换.在这里,我们需要通

[转贴][WCF Security] 3. X509 身份验证

原文:http://www.rainsts.net/article.asp?id=474   个人认为在 Intranet / Internet 环境下,最方便的认证方式应该是 X.509 数字证书.当然,还有一个原因是我用 Windows Authentication 从来没成功过. 以下我们详细描述如何创建 "Certificate Authentication". 1. 创建数字证书 一般情况下,我们为服务器以及每个客户端都单独创建一个服务器,以便标识其唯一身份.创建数字证书时,

[转贴][WCF Security] 4. 用户名/密码身份验证

原文:http://www.rainsts.net/article.asp?id=475   X.509 比较适合验证 "客户机" 的身份,而另外一方面,我们可能需要针对具体的 "用户" 进行验证.本文将记述基于 "用户名/密码" 方式的身份验证开发步骤. 1. 服务器数字证书 我们同样需要为服务器准备一个数字证书. D:\>makecert -r -pe -n "CN=MyServer" -ss My -sky exc

[转贴][WCF Security] 2. 安全参数设置

[原文]http://www.rainsts.net/article.asp?id=473 1. 安全方式 通过设置 Binding 的属性 Security 来实现. NetTcpBinding binding = new NetTcpBinding(); binding.Security.Mode = SecurityMode.Transport; binding.Security.Transport.ProtectionLevel = System.Net.Security.Protect