WCF读书笔记–安全:基础知识(身份验证、授权、传输安全)

学WCF也有一段时间了,我买的是<WCF编程>第二版,这本书还是不错的,知识点很全面,不过就是具体的实例很少,这样对于很多的知识点难免会产生”当时看的时候是理解了,但是过一段时间就会忘记”的现象,而且很多的知识会混淆.写这个系列主要是为了复习一下以前学过的知识,把知识做一个系统的整理,便于记忆,再就是对书中的一些内容写出具体的实例,这样记忆会更深刻,我是初学者,肯定会有理解不对的地方,欢迎各位指正.本文中部分内容引用别人的文章,我会在引用的地方标注出来

 

身份验证:一个特定的动作,在该动作中将检验服务的调用者是否符合自己所声称的身份.身份验证是一个相互的过程,服务端验证客户端,反过来,在某些情况下(通过互联网访问),客户端也需要验证服务端.

身份验证包括:

                 1. 无身份验证:         所有的调用者都能访问服务

2.Windows身份验证:Kerberos(有域服务器)和NTLM(工作组)

                 3.用户名与密码:       客户端向服务端发送一个用户名和密码,服务端通过一些凭证库来验证

                 4.X509证书:           客户端包含一个证书,服务端预先知道这些证书,当客户端发送请求时,服务端会验证客户端的证书

                 5.定制机制:            允许开发者任意使用一种身份验证机制

                 6.发布口令:             调用者与服务同事依赖一个安全口令

授权:允许服务调用者能够执行的内容,这个操作是建立在身份验证基础之上的,如果没有身份验证,那么授权也就无从谈起了.服务端会依赖某个凭证库,在那里调用者会被映射为逻辑角色

WCF凭证库:1.Windows组   2.asp.net Provider  3.自定义角色库(最简单)

传输安全:个人理解就是如果保证信息在传输过程中的安全.传输安全是身份验证和授权的前提.

传输安全模式   如图(其实这个图不是从老徐博客里弄得,不过后来才看到右下角有老徐的名字__囧)

传输安全

6VK}`7E6~XSR0C1[[M6S0$2

书上讲的为5种模式,但是在VS中的配置文件里,却只有四种,不知道为什么???!~~~

TransportWithMessageCredential  对应的是Mixed

None: 关闭了传输安全的功能

Transport Security: 对通道上所有的通信加密,除了接收者外,没有任何一方可以看见消息的内容,这种安全模式只能保证点对点的传输安全,也就是客户端必须与服务端直接连接,

                               这种模式是最简单的,也是性能最好的.通常只用于局域网应用程序

     个人理解:在此模式下,对通道上的所有通信加密,也就是对通信的内容也加密,对内容加密的话,这有点像MessageSecurity模式了,但是Transport的这种内容的加密只能维持在点对点的环境下面,例如有三个点A、B、C,A和B启用了Transport模式

image

因为Transport要求客户端与服务端就加密进行协商的,在超出点对点的外围以后,消息就不在受保护了,所以在一个复杂的网络环境中,Transport是不可取

Message Security: 只是对消息的本身进行加密而不是对传输进行加密,所以能实现端对端的安全传输

                             点对点与端对端还是比较容易区分的,如上图,A与C之间是端到端的关系,A与B之间是点到点的关系

Mixed: 在实现完整性和机密性以及服务端身份验证时采用的是Transport Security模式,而在保护客户端安全凭证的安全时采用了Message Security模式,此模式也是一个点对点的模式

            个人理解:其实就是在是对传输加密的,但是客户端的凭证(用户名,密码)这些信息是被加密的.

Both: 同是使用Transport模式和Message模式,就是传输时安全的,传输的消息也是经过加密的

以上为5中传输模式,不过对于Transport,我一直有一个疑问就是:Transport为传输的内容加密吗?

通过请教群里的朋友,他们告诉我是对内容加密的,不过还是在这里提出来,希望有更形象的回答.谢谢啦~~~

传输安全模式是在绑定中配置的

<bindings>
  <netTcpBinding>
    <binding name="tcpBinding">
      <security mode="Transport">
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
      </security>
    </binding>
  </netTcpBinding>
</bindings>

 

 

 

编程方式实现:

NetTcpBinding binding = new NetTcpBinding(SecurityMode.Transport);
或者
NetTcpBinding binding1 = new NetTcpBinding();
binding1.Security.Mode = SecurityMode.Transport;

传输安全模式与各种binding是一个组合的关系,并不是每种binding都能应用所有的传输安全模式

所有WCF的绑定默认都是安全的,只有BasicHttpBinding默认是非安全的

名称 None Transport Message Mixed Both
BasicHttpBinding Yes(默认) Yes Yes Yes No
NetTcpBinding Yes Yes(默认) Yes Yes No
NetNamedPipeBinding Yes Yes(默认) No No No
WSHttpBinding Yes Yes Yes(默认) Yes No
WSDualHttpBinding Yes No Yes(默认) No No
NetMsmqBinding Yes Yes(默认) Yes No Yes

Mixed和Both不太常用,可以不用记

1.局域网的绑定都默认使用Transport模式

2.所有互联网的绑定(除BasicHttpBinding外,默认为None)都默认使用Message模式

3.WSDualHttpBinding不支持Transport模式

 

下面看一下,在传输模式下(Transport、Message),身份验证与binding的关系

在Transport模式下:

名称 None Windows UserName Certificate
BasicHttpBinding Yes(默认) Yes Yes Yes
NetTcpBinding Yes Yes(默认) No Yes
NetNamedPipeBinding No Yes(默认) No No
WSHttpBinding Yes Yes(默认) Yes Yes
WSDualHttpBinding
NetMsmqBinding Yes Yes(默认) No Yes

 

所有的局域网绑定都支持Windows方式的身份验证

NetTcpBinding在Transport模式下不支持UserName身份验证模式

wsDualHttpBinding不支持Transport传输安全模式的

D{NJZVIHK6DYSTSY{QMS(DX

 

在Message传输安全模式下Binding与身份验证:

名称 None Windows UserName Certificate IssuedToken
BasicHttpBinding No No No Yes No
NetTcpBinding Yes Yes(默认) Yes Yes Yes
NetNamedPipeBinding
WSHttpBinding Yes Yes(默认) Yes Yes Yes
WSDualHttpBinding Yes Yes(默认) Yes Yes Yes
NetMsmqBinding Yes Yes(默认) Yes Yes Yes

除了BasicHttpBinding和NetNamedPipeBinding以外,其他的模式默认都是用Windows凭证

Http协议上是用Windows验证,比较诡异.

书上的说法是:是为了在选定正确的传输安全下,让用户安全的使用WCF直接提供的各种绑定,而不是首先求助于定制凭证库.

标签