一个强大的WCF服务安全系统,拥有两种安全模式或级别预期的客户端可以访问的服务。这是常见的分布式事务的安全威胁正在放缓,在很大程度上由WCF决定。

关键的安全功能

WCF服务有四个主要的安全功能,如下图所示。

  • 认证- 这里认证是不限定于识别消息的发送者,但是相互的,即消息接收器的认证是必需的,以排除任何种类的中间人攻击的可能性。

  • 授权- 这是采取了一个WCF服务,以确保安全性的下一步骤,并在此确定服务是否应授权调用方进一步或不会进行。虽然授权不依赖于身份验证时,它通常如下认证。

  • 保密 - 调用者和服务之间的信息交流是保密的,限制其解释并不打算为其他人公开消息。为了使这成为可能,加密与各种各样的其他机制一起使用。

  • 完整性- 最后一个关键概念是保持完整性,即提供了保证,该消息尚未从发送者到接收者不被任何人在这一过程篡改。

传输安全模式

WCF提供以下传输安全模式,以确保在客户机和服务器之间的安全通信。多样传输安全模式如下所述。

  • None - 此模式不能保证任何消息安全和服务不获取有关客户端的任何凭据。这种模式是非常危险的,因为它可以使信息被篡改,因此不推荐使用。

<wsHttpBinding>
<binding name="WCFSecurityExample">
<security mode="None"/>
</binding>
</wsHttpBinding>
  • Transport - 这种模式是实现信息通过使用通信协议,如TCP,IPC,HTTPS和MSMQ一个安全的传输的最简单方法。这种模式是比较有效的,当在传输点至点,并主要是用于在受控环境中,也就是说,内部网应用。

<wsHttpBinding>
<binding name="WCFSecurityExample">
<security mode="Transport"/>
</binding>
</wsHttpBinding>
  • Message - 安全模式可以相互验证,并提供隐私的消息进行加密,并且可以通过http,这不被认为是一种安全协议被传输在很大程度上。这里的安全性提供了端 - 端,而不考虑有多少中介参与消息传送和是否有一个安全的运输或没有。该模式是通过互联网应用程序通常使用。

<wsHttpBinding>
<binding name="WCFSecurityExample">
<security mode="Message"/>
</binding>
</wsHttpBinding>
  • Mixed - 这种安全模式是不经常使用,客户端身份验证仅在客户端级别提供。

<wsHttpBinding>
<binding name="WCFSecurityExample">
<security mode="TransportWithMessageCredential"/>
</binding>
</wsHttpBinding>
  • Both - 此安全方式包括两种传输安全性和信息的安全性,提供了健壮的安全盖,但通常会导致超载的整体性能。这一个仅由MSMQ支持。

<netMsmqBinding>
<binding name="WCFSecurityExample">
<security mode="Both"/>
</binding>
</netMsmqBinding>

所有的WCF绑定,除非有basicHttpBinding传输安全性默认情况下有一定关系。

消息安全级别

消息级安全性不依赖于WCF协议。它是通过使用一个标准的算法对数据进行加密采用与消息数据本身。有若干客户端凭证可用于不同的绑定的消息的安全级别,这些将在下面讨论。

WCF消息级安全性的客户端证书

None :在此,使用加密来保护该消息而被执行,这意味着,该服务可以由一个匿名客户访问没有客户机认证。除了basicHttpBinding,所有的WCF绑定支持此客户端凭据。然而,应当注意的是,对于NetNamedPipeBinding客户端凭证不可用。

  • Windows - 在这里无论是信息的加密和认证的客户端发生了一个实时登录的用户。在此情况下,也不同于所有其他的WCF绑定,NetNamedPipeBinding不可用以及basicHttpBinding不提供支持。

  • UserName - 这里消息被加密,以及通过提供用户名固定,而客户端进行认证,因为它们需要提供密码。 basicHttpBinding就像上面的两个客户端凭证,不支持用户名和它不适用于NetNamedPipeBinding。

  • Certificate - 随着信息加密,客户端和服务获得与证书的身份验证。此客户端证书可用,并且支持所有的WCF绑定,除了NetNamedPipeBinding。

  • IssuedToken - 类似CardSpace从一个机构颁发的令牌用于验证的消息。这里也进行消息的加密。

下面的代码显示了客户端凭据如何配置WCF的信息安全等级/模式。

<netTcpBinding>
<binding name="WCFMessageSecurityExample">
<security mode="Message">
<message clientCredentialType="None"/>
</security>
</binding>
</netTcpBinding> <netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>

这里,必须指出的是,传输安全模式具有超过该消息的安全级别的边缘,因为前者是更快。它不需要任何额外的编码,并提供互操作性的支持,并且因此不会降低整体性能。

然而,从安全角度考虑,将消息安全模式是更加健壮,并且独立的协议,并提供端到端的安全性。

原文地址:http://www.yiibai.com/wcf/wcf_security.html

WCF入门(十一)---WCF安全的更多相关文章

  1. WCF入门三[WCF宿主]

    一.概述 WCF程序必须在宿主上运行,也就是WCF服务必须寄宿在某一个windows的进程中,可以是IIS.控制台程序.窗体程序.WAS以及所有.net程序等程序进程中.在我用VS2013创建WCF服 ...

  2. WCF入门一[WCF概述]

    一.什么是WCF WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的.安全.可信赖.事务性的解决方案,且能与已有系统兼容协作 ...

  3. WCF入门教程[WCF基本应用]

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  4. WCF入门四[WCF的通信模式]

    一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...

  5. 纯手写wcf代码,wcf入门,wcf基础教程

    1.定义服务协定     =>定义接口 using System.ServiceModel; namespace WcfConsole { /// <summary> /// 定义服 ...

  6. WCF入门二[WCF的配置文件]

    一.概述 往往在很多项目中数据库连接字符串.变量和一些动态的加载类会写在配置文件中.WCF也会在配置文件中写入一些配置参数,比如服务的地址.服务用于发送和接收消息的传输和消息编码等,通过配置文件可以灵 ...

  7. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  8. 学习WCF入门的第一个实例

    一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...

  9. WCF入门教程(五)配置文件

    WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...

  10. WCF入门教程(四)通过Host代码方式来承载服务

    WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...

随机推荐

  1. 用JavaScript刷新框架子页面的七种方法

    下面以三个页面分别命名为framedemo.html,top.html,button.html为例来具体说明如何做. 其中framedemo.html由上下两个页面组成,代码如下: < !DOC ...

  2. How to change comment

    AX2009 // USR Changed on 2013-07-10 at 12:57:46 by 7519 - Begin // USR Changed on 2013-07-10 at 12:5 ...

  3. Python操作列表的常用方法

     下面列出列表常用的方法操作列表以及小例子:   1.  Append      在列表末尾添加元素,需在列表末尾添加元素,需要注意几个点:      A. append中添加的参数是作为一个整体 & ...

  4. WPF:实现主应用程序单一实例运行方式总结

       本文介绍常见的实现主应用程序单一实例运行的几种方式. 方式一: public partial class App : Application { protected override void ...

  5. 1014. Waiting in Line (30)

    Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...

  6. Cisco IOS Basic CLI Configuration:Access Security 01

    1.  Telnet Switch Config: Switch>en Switch#conf t Enter configuration commands, one per line.  En ...

  7. c++继承详解

    C++中的三种继承public,protected,private 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员 ...

  8. EditorWindow 和MenuItem

    using UnityEngine; using System.Collections; using UnityEditor; public class ClipEventEditor : Edito ...

  9. PropertyDrawer 自定义属性绘图

    public class PlayerAttributeExample : MonoBehaviour { //无滑块的属性 ; //特性限定,有滑块 [Range(, )] ; } Range特性的 ...

  10. 关于qt5在win7下发布 & 打包

    QT5 发布时,莫过于依赖动态链接库(dll) , 但是,QT5的动态链接库貌似都有2套 ,例如 Qt5Core (针对realese) , Qt5Cored (针对debug) ,凡事末尾带d的都是 ...