WCF入门(十一)---WCF安全
一个强大的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安全的更多相关文章
- WCF入门三[WCF宿主]
一.概述 WCF程序必须在宿主上运行,也就是WCF服务必须寄宿在某一个windows的进程中,可以是IIS.控制台程序.窗体程序.WAS以及所有.net程序等程序进程中.在我用VS2013创建WCF服 ...
- WCF入门一[WCF概述]
一.什么是WCF WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的.安全.可信赖.事务性的解决方案,且能与已有系统兼容协作 ...
- WCF入门教程[WCF基本应用]
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
- WCF入门四[WCF的通信模式]
一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...
- 纯手写wcf代码,wcf入门,wcf基础教程
1.定义服务协定 =>定义接口 using System.ServiceModel; namespace WcfConsole { /// <summary> /// 定义服 ...
- WCF入门二[WCF的配置文件]
一.概述 往往在很多项目中数据库连接字符串.变量和一些动态的加载类会写在配置文件中.WCF也会在配置文件中写入一些配置参数,比如服务的地址.服务用于发送和接收消息的传输和消息编码等,通过配置文件可以灵 ...
- 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代码方式来 ...
- 学习WCF入门的第一个实例
一.概述 WCF说白了就是一个基于终结点的通信手段!就是Service端提供一定的功能实现,然后暴露出一个或多个终结点,Client端调用Service端的功能(可以理解为调用一个函数),那么Clie ...
- WCF入门教程(五)配置文件
WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...
- WCF入门教程(四)通过Host代码方式来承载服务
WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更 ...
随机推荐
- php 判断字符串在另一个字符串中位置
$email='user@example.com'; //定义字符串$result=strstr($email,'@'); //返回子字符串echo $result; / ...
- C# new的用法
在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数.这种大家都比较熟悉,没什么好说的了. 2)new 修饰符:在用作修饰符时,new 关键字可以显 ...
- 优化C++程序编译效率的一些方法
优化是一件非常重要的事情.作为一个程序设计者,你肯定希望自己的程序既小又快.DOS时代的许多书中都提到,“某某编译器能够生成非常紧凑的代码”,换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使 ...
- CentOS6.3连网获取IP失败 This device is not active
虚拟机拷贝到其它机器之后,启动:然后用ifconfig -a发现eth0没有IP地址,查看 /etc/sysconfig/network-scripts/ifcfg-eth0文件,发现IP地址已经指定 ...
- Object.keys()
Object.keys(obj),返回一个数组,数组里是该obj可被枚举的所有属性名.请看示例: 示例一: function Pasta(grain, width, shape) { this.gra ...
- Quartz.net 的开源任务管理平台
Quartz.net 的开源任务管理平台 前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblog ...
- android开发设置dialog的高宽
这里设置为跟屏幕一样的宽度,:看代码 dlg.show(); WindowManager.LayoutParams params = dlg.getWindow().getAttributes(); ...
- ios 框架学习笔记
ios主要的系统层次: 一.Cocoa Touch 层:创建应用程序主要使用的框架. 1.关键技术: AirDrop:实现应用间通信. Text Kit:处理文本和排版. UIKit Dynamics ...
- java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- iOS上的jQuery.on()冒泡事件绑定 以及 iOS绝对定位元素中的输入框
上周遇到两个坑. 一是jQuery的on方法 事件冒泡,在iOS中有问题. $("body").on("click",".contentup" ...