WCF Security基本概念(转载)
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基本概念(转载)的更多相关文章
- WCF Security(转载)
WCF Security 主要包括 "Transfer Security"."Access Control"."Auditing" 几个部分 ...
- Spring Security核心概念介绍
Spring Security是一个强大的java应用安全管理库,特别适合用作后台管理系统.这个库涉及的模块和概念有一定的复杂度,而大家平时学习Spring的时候也不会涉及:这里基于官方的参考文档,把 ...
- 浅析Oracle范式的概念(转载)
范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中 ...
- javascript 中caller,callee,call,apply 的概念[转载]
在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments : 该对象代表正在执行的函数和调用它的函数的参数. [function.]argument ...
- ASP.NET 2.0服务器控件开发的基本概念(转载)
利用ASP.NET 2.0技术,创建Web自定义服务器控件并不是一件轻松的事情.因为,这需要开发人员了解并能够灵活应用多种Web开发技术,例如,CSS样式表.客户端 脚本语言..NET开发语言.服务器 ...
- Spring Boot中使用Spring Security进行安全控制转载来自翟永超
我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(比如:Apache ...
- WCF系列 基础概念
WCF全称Windows Communication Foundation,是微软构建面向服务的分布式编程框架.而它其实是统一了COM和.Net Remoting等分布式技术提供一个完整,通用,可靠的 ...
- Lucene的基本概念----转载yufenfei的文章
Lucene的基本概念 Lucene是什么? Lucene是一款高性能.可扩展的信息检索工具库.信息检索是指文档搜索.文档内信息搜索或者文档相关的元数据搜索等操作. 信息检索流程如下: 1. 将即将检 ...
- wcf常用的概念
常见的服务行为包括实例控制.并发控制.元数据发布等 在WCF中,有三种消息交换模式:数据报模式.请求-响应模式.双工模式. 在WCF中一共包含了4种契约,分别是服务契约.数据契约.错误契约和消息契约. ...
随机推荐
- find命令与cat命令区别
在当前目录下查找 MEMBERINTERFACE 这个字符串的文件find . -name '*'|xargs grep "MEMBERINTERFACE"find / -name ...
- Linux中安装NodeJs 、cnpm 、npm
一.安装NodeJs 切换到 cd /usr/local/src/ 下载nodejs wget https://nodejs.org/dist/v6.9.3/node-v6.9.3-linux-x64 ...
- WebRTC音频预处理单元APM的整体编译及使用
正文 行的gnu静态库链接路径是针对NDK版本 r8d 的,如读者版本不匹配,请自行找到 libgnustl_static.a 静态库的路径进行替换. 3)本示例并不打算编译 WebRTC 的测试工程 ...
- [spring源码学习]四、IOC源码——普通bean初始化
一.代码例子 此节开始涉及到一个bean具体生成和保存的过程,仅仅涉及到最简单的bean,代码依旧是最简单的 public static void main(String[] args) { Defa ...
- oracle中批量生成字段类型的脚本
select ' ALTER TABLE '||table_name || ' MODIFY( '|| column_name || ' DATE );' from USER_TAB_COLUMNS ...
- 北京电子科技学院(BESTI)实验报告5
北京电子科技学院(BESTI)实验报告5 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名) 郑凯杰.周恩德 学号:(按贡献大小排名) 20145314.20145217 ...
- iOS Swift 数组 交换元素的两种方法
swap(&arr[fromIndexPath.row], &arr[to.row]) (arr[fromIndexPath.row],arr[to.row]) = (arr[to.r ...
- 【转】浅谈truncate的使用
delete 操作不会改变表的高水标记,因此如果我们对一个表插入1000万条数据,然后再回滚(对insert操作做回滚相当于相应地做delete操作),会使表的高水标记增长得很高,这时虽然我们操作的表 ...
- MySQL学习笔记01_数据库基础知识
01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...
- Python调用HTTP接口并传递cookie
#get接口调用 import urllib import urllib2 get_url = "http://10.10.3.63/test?id=123&name=nba&quo ...