WCF热带鱼书学习手记 - Security (1) 概述

谈到安全,首先应该想到的是三个基本的安全相关的动作,可以用AAA来概括,即Authentication, Authorization and Audit

  • Authentication - 验证用户是不是他所宣称的人。或者反过来,server是不是我们确实要访问的server。。。。这年头没啥东西是绝对可信的啊!
  • Authorization - 通过验证的用户能做什么样的操作。
  • Audit - 记录用户的验证,授权等安全相关操作活动,以备后用

WCF的运行是基于消息传输的。我们在谈及上述3个security要素的时候,通常假设应用程序通讯及消息传输是安全的。也就是说,WCF作为分布式应用程序的框架,一般情况下会涉及到程序各个节点之间的信息传输,如果这个传输都不安全的话,三A也就没有了构筑安全的应用程序的基石。所以除了AAA意外,WCF安全还要考虑到消息传输安全。

 

1. Authentication

WCF提供了一些基本的用户验证方式:

  • none -  没有安全验证。任何人都能调用所有的service。通常情况下,这个是不可取的。
  • Windows - 同AD,domain或者本地user/group集成。一般来说应用在局域网,intranet中。
  • User and Password - 适用于一般Internet的场景,username和password存储在数据库或者其他storage中,通过验证用户提供的凭证对比storage中的凭证来实现身份验证。
  • X509 certificate - 证书方式。类似我们使用的身份证。server端承认公安局是合法的发证机关并信任它,对于公安局发布的证书也信任,依据这个前提进行验证。
  • Issued Token - 个人感觉和证书方式类似,也需要第三方。client和server都拥有从第三方拿过来的token,基于这个进行验证。
  • Others - 指纹等等。。。自定义的

2. Authorization

WCF的授权一般来说根据凭证库的类型可分为,基于user/group的和基于user/role的,概念上2者应该一样,不过前者凭证库是AD或者是Windows local user,后者是数据库。当然WCF提供了扩展机制,上面说的2个是最常用的case。

 

3. Audit

这个没什么好说的,WCF提供了可配置的Audit机制,完全可以做到无编程的仅靠配置的安全审核。

 

4. 传输安全

传输安全涉及到三个要素:

  • 完整性 - 消息在传输过程中不能被修改,如果被修改了,server能够知道并且拒绝下一步的执行。

    完整性很容易理解,如果消息被篡改了,意味着客户端调用不再安全,服务必须拒绝客户端调用。那么server如何知道消息是否被篡改了呢?举个例子来说,在我自己的印象中数字签名是一种可以实现完整性的技术。首先要对你要发送的消息进行hash,不同的消息得到的hash肯定是不同的,而且不能通过hash值反推出消息。这样server可以通过相同的hash算法运用到得到的消息上面,把得到的hash值与客户端发送过来的hash值进行比较,如果二者一样,证明消息没有被篡改过。当然应该要对client端产生的hash值进行加密,确保hash值不会也被篡改。。。利用公钥私钥对进行加密解密操作可以减少hash值被获取的情况。

  • 机密性 - 消息在传输过程中不能被读取,因为其中包含的敏感信息也可能造成损害。
  • 相互验证 - 消息传输双方要相互确认对方是合法的。这个和3A中的authentication本质上是一样的。

WCF提供了5种传输安全模式:

  • none - 无安全。
  • transport - 直接对通信信道进行加密,所有通过信道的小心都会被加密。只适用于点对点的通信(局域网场景)。
  • message - 仅仅对消息进行加密,适用于端对端通信(Internet场景)。
  • mixed - 消息传输时使用transport,并且利用message模式对client凭证进行加密。
  • both - 同时使用信道加密,和消息加密。。。一般没必要。

OK,Security是WCF中最复杂的feature之一,也是这本热带鱼书中我比较感兴趣的。后面会继续写些文章关于其他安全相关的学习。

 

你可能感兴趣的:(Security)