WCF服务安全控制之netTcpBinding的用户名密码验证

选择netTcpBinding

WCF的绑定方式比较多,常用的大体有四种:

  • wsHttpBinding
  • basicHttpBinding
  • netTcpBinding
  • wsDualHttpBinding

这四种绑定方式中,有两种支持双工通信:

  • wsDualHttpBinding
  • netTcpBinding

在我目前的参与的项目中,考虑到产品面临的环境基本是内网,而且对数据传输效率比较高,可能会有大数据量的传输和频繁的服务访问,并且在项目中涉及到了即时消息模块,需要WCF双工通信支持,我们选用了netTcpBinding的方式。

安全方案

一般而言内网部署采用netTcpBinding方式,外网则采用能免受防火墙阻碍的wsHttpBinding绑定,由于内网中的服务相对是一个安全的环境,所以WCF的配置多数采用的是windows验证方式

当然也可以使用证书、用户名密码等方式来控制安全,很早就想将项目中的安全控制做一下,也查阅了很多资料,但发现netTcpBinding绑定的安全控制方面的资料比较少,很多都是讲wsHttpBinding和basicHttpBinding的,在用户名密码验证方面,目前为止发现两种可行的安全控制方案:

  1. 改写SOAP的Header,用来传递用户名和密码,但由于是明文传递,并不安全
  2. 利用WCF自身的安全机制,重写验证类来实现验证

第一种方案在客户端给SOAP加上标识时需要有一个执行的范围限制,不太好抽象出来做成Proxy的工厂类:

 
   
 
   
 
   

于是想摸索一下WCF内在的安全机制,发现在netTcpBinding绑定模式下采用用户名密码方式来验证,需要对用户名

和密码进行加密,WCF认为在传递SOAP时应该对用户名密码这些敏感信息采用加密方案,这个方案选择了X509认证的方式,在MSDN上有对X509的详细说明,这里不再赘述。

这里我们通过一个Demo来了解一下整个过程

实例验证

首先我们有一个服务

 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 
   
 

后续

对于认证,笔者目前也没有深入了解,打算在深入了解后写一篇博文。
 
 
   

你可能感兴趣的:(WCF服务安全控制之netTcpBinding的用户名密码验证)