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

1. Transfer Security

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

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

(1) 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 支持这一安全方式。

(2) 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>

(3) 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" 验证客户端身份的目的不同,它被用来控制用户(组)的代码访问授权。比如说财务相关服务只能被 "会计部" 访问,人事相关服务只能被 "人事部" 和 "董事会" 访问,越权访问会触发 "权限异常"。简单点说,"Authentication" 询问 "你是谁?",然后 "Authorization" 会限制你该做什么,不该做什么。

3. Auditing

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

WCF Security(转载)的更多相关文章

  1. WCF Security基本概念(转载)

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

  2. WCF basicHttpBinding之Message Security Mode

    原创地址:http://www.cnblogs.com/jfzhu/p/4067873.html 转载请注明出处 前面的文章<WCF Security基本概念>介绍了WCF的securit ...

  3. WCF Misconfiguration: Security Not Enabled

    Abstract: No transport or message security has been defined. Explanation: Applications that transmit ...

  4. IIS部署WCF

    IIS部署WCF [转载自——http://www.cnblogs.com/starksoft/p/4992059.html] 1 部署IIS 1.1 安装WAS IIS原本是不支持非HTTP协议的服 ...

  5. WCF与ASMX Web服务差异比较[译]

    First of all, it needs to understand that WCF Service provides all the capabilities of .NET web serv ...

  6. Service Oriented Architecture and WCF 【转】

    http://www.codeproject.com/Articles/515253/Service-Oriented-Architecture-and-WCF Introduction This a ...

  7. 网络负载均衡环境下wsHttpBinding+Message Security+Windows Authentication的常见异常

    提高Windows Communication Foundation (WCF) 应用程序负载能力的方法之一就是通过把它们部署到负载均衡的服务器场中. 其中可以使用标准的负载均衡技术, Windows ...

  8. 学会WCF之试错法——安全配置报错分析

    安全配置报错分析 服务端配置 <system.serviceModel> <bindings> <wsHttpBinding> <binding name = ...

  9. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

随机推荐

  1. java中集合的使用

    集合使用: 先说数组:array :用来存同一种数组类型的容器 eg:现在想把班上所有人的信息存起来 1.每一个人的信息可以用一个对象存起来 2.可以用一个数组来接受(现在数组中要接受的是对象) ob ...

  2. 为 placeholder 自定义样式

    textarea::-webkit-input-placeholder{ padding: 1em; } textarea::-moz-placeholder{ padding: 1em; } 同理, ...

  3. Swift - 生成随机颜色(Extension UIColor)

    在开发中,我们有时需要生成一些随机的颜色.但 UIColor 没有提供方法或属性来直接获取随机颜色,这里对其进行扩展,方便使用. 1,扩展UIColor,增加随机颜色属性 1 2 3 4 5 6 7 ...

  4. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

  5. Jetty使用教程(四:24-27)—Jetty开发指南

    二十四.处理器(Handler ) 24.1 编写一个常用的Handler Jetty的Handler组件用来处理接收到的请求. 很多使用者不需要编写Jetty的Handler ,而是通过使用Serv ...

  6. AutoMapper搬运工之配置

    回顾 前几篇搬运了AutoMapper的基本用法,自定义映射,相信有看的同学已经会使用AutoMapper这个强大的Mapping工具了.不过细心的你是否还记得前几篇中有提到Map的创建并非是每次都需 ...

  7. Borland C++建立工程菜鸟教程

    实在不敢相信,学校里现在教学用的编译器还是七八十年代的老古董,难道这东西更能培养从没接触过代码的学生深刻理解c语言的运行流程,不得不说像VisualStdio这样的重量级开发环境确实屏蔽了很多底层的运 ...

  8. EXT.NET 使用总结(1)

    前言 从系统改版到现在,将近半年的时间,原本陌生的Ext.NET的UI框架,也慢慢的熟悉了.总的来说,这个UI框架还是很优秀的,但是也没有100%完美的产品(老系统使用easy ui其实也挺好的).趁 ...

  9. iOS NSOperation 封装 通知实现界面更新

    #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface MYOperation : NSOpe ...

  10. hdu 3632 A Captivating Match(区间dp)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3632 题意:n个人进行比赛,每个人有一个价值a[i],最后冠军只有一个,只能相邻两个人进行 ...