一个强大的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. 非常有用!eclipse与myeclipse恢复已删除的文件和代码

     eclipse与myeclipse恢复已删除的文件和代码 今天写了1300多行代码,被不小心删除了顿时感觉手足无措,后来用myeclipse的历史文件恢复功能,找回来了,虚惊一场!!!MyEclip ...

  2. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

    测试库一条update语句报错:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction mysql> ...

  3. Oracle 新建序列值

    create sequence MSG_OUTBOX_ID_SEQ minvalue maxvalue start increment cache ;

  4. Javascript 面向对象编程

    Javascript是一个类C的语言,他的面向对象的东西相对于C++/Java比较奇怪,但是其的确相当的强大,在 Todd 同学的“对象的消息模型”一文中我们已经可以看到一些端倪了.这两天有个前同事总 ...

  5. WPF 进程间通讯----inter-process communication

    进程间通讯--inter-process communication  进程间相互通讯的方法有很多,如用web services,xml 等互相读取, 网络的可以使用socket 等. 2个WinFo ...

  6. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  7. QQ炫舞官网选项卡效果

    这篇博文里需要注意的是当点击事件发生的时候,需要用循环,重置标题的classname和标题底部都设置成隐藏,当点击的时候在加上标题的active属性和显示属性 代码地址:https://github. ...

  8. c++ 枚举 在函数中的应用

    #include <iostream> using namespace std; enum RespErrNo { SUCCESS = , INVALID_URL = , INVALID_ ...

  9. 前端MVC学习——模块发开发、seajs学习

    这份学习链接已经足够了:http://seajs.org/docs/#intro 我假设你至少已经浏览过上述链接文档.并且掌握了基本的seajs基础知识~ 手把手教你创建helloworld~ Hel ...

  10. hibernate4.0中SessionFactory的创建

    创建SessionFactory 首先创建Configuration对象,主要方式是: new Configuration().configure() 默认情况下Hibernate会去classPat ...