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直接提供的各种绑定,而不是首先求助于定制凭证库.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值