[WCF安全系列]绑定、安全模式与客户端凭证类型:WSHttpBinding与WSDualHttpBinding

简介:

上一篇文章中,我们详细地介绍了BasicHttpBinding具有怎样的安全模式的支持,已经在各种安全模式下分别可以采用怎样的客户端凭证。接下来我们来进一步分析另外三个基于HTTP的绑定,即WSHttpBinding、WS2007HttpBinding和WSDualHttpBinding。考虑到它们之间在安全设置方面的相关性,在这里我们先来介绍WSDualHttpBinding。

一、WSDualHttpBinding

我们在前面提到过,WCF所有基于HTTP的绑定的Transport安全模式都是通过TLS/SSL(HTTPS)的方式来实现的。TLS/SSL如果要确保从A到B的安全连接,要求B是一个绑定了数字证书的HTTPS站点。正是由于这样的原因,Transport安全模式不能应用于基于HTTP的双向通信,因为服务端对客户端的安全连接得不到保障。所以WSDualHttpBinding只能提供基于Message安全模式的支持

这样的限制直接反映应用编程接口的定义上。我们通过WSDualHttpSecurity进行针对于WSDualHttpBinding的安全设置。WSDualHttpSecurity通过Mode属性返回采用的安全模式。该属性类型为WSDualHttpSecurityMode枚举,定义其中的2两个枚举值表示WSDualHttpBinding支持的安全模式:None和Message。这也印证了关于WSDualHttpBinding不能够提供针对Transport安全的论点。在默认的情况下,WSDualHttpBinding采用Message安全模式。

正是因为WSDualHttpBinding只提供针对于Message安全模式的支持,所以WSDualHttpSecurity中仅仅定义了Message属性,而不存在Transport属性的定义。用于进行Message安全设置的Message属性返回的是一个MessageSecurityOverHttp类型对象。MessageSecurityOverHttp具有我们熟悉的ClientCredentialType返回客户端凭证类型,属性对应的类型为MessageCredentialType枚举。定义在MessageCredentialType中的五个枚举值表示支持的五种客户端凭证类型:None、Windows、UserName、Certificate和IssuedToken。 其中Windows为默认的选项,意味着在默认情况下WSDualHttpBinding以Windows认证的方式实现对客户端的认证。WSDualHttpBinding安全相关的应用编程接口的定义体现在如下所示的代码片断中。

   1: public sealed class WSDualHttpSecurity
   2: {
   3:     //其他成员
   4:     public MessageSecurityOverHttp Message { get; set; }
   5:     public WSDualHttpSecurityMode  Mode {get; set; }
   6: }
   7: public class MessageSecurityOverHttp
   8: {
   9:     //其他成员
  10:     public MessageCredentialType ClientCredentialType { get; set; }
  11: }
  12: public enum MessageCredentialType
  13: {
  14:     None,
  15:     Windows,
  16:     UserName,
  17:     Certificate,
  18:     IssuedToken
  19: }
  20: public enum WSDualHttpSecurityMode
  21: {
  22:     None,
  23:     Message
  24: }

注:IssuedToken,代表的是一种基于WCS(Windows Card Space)的认证方式,而这又涉及到一个更加宽泛的话题,即安全联合(Security Federation),本系列并不涉及到此内容。

二、WSHttpBinding/WS2007HttpBinding

接下来我们再来讨论一下WSHttpBinding和WS2007HttpBinding。WSHttpBinding的Security属性返回的是一个WSHttpSecurity类型的对象。由于WS2007HttpBinding派生自WSHttpBinding,所以它直接将该属性继承下来。WSHttpSecurity的Mode属性返回一个SecurityMode枚举。定义在该枚举中的四个枚举值表示WSHttpBinding和WS2007HttpBinding支持的4种安全模式:None、Transport、Message和TransportWithMessageCredential,其中Message为默认采用的安全模式。

和BasicHttpBinding一样,WSHttpBinding也具有一个Security属性,不过对应的类型为WSHttpSecurity。WS2007HttpBinding派生自WSHttpBindingWSHttpSecurity,直接继承了Security属性。WSHttpSecurity的Mode属性表示所支持的安全模式,类型为SecurityMode枚举。SecurityMode的四个枚举值表示WSHttpBinding支持的四种安全模式,即None、Transport、Message和TransportWithMessageCredential。其中Message为默认值,意味着WSHttpBinding和WS2007HttpBinding在默认的情况下提供基于Message安全模式的支持

WSHttpSecurity的Transport属性返回一个HttpTransportSecurity类型的对象,用于进行Transport安全的相关设置。HttpTransportSecurity的ClientCredentialType属性返回的是上面我们提到过的HttpClientCredentialType枚举。这意味着WSHttpBinding和WS2007HttpBinding和BasicHttpBinding在Transport模式下具有相同的客户端凭证类型集。所不同的是,WSHttpBinding和WS2007HttpBinding默认情况下采用Windows凭证

而WSHttpSecurity的Message属性返回用于进行Message安全相关设置的NonDualMessageSecurityOverHttp类型是MessageSecurityOverHttp的子类,所以它直接继承了定义在MessageSecurityOverHttp中的ClientCredentialType属性。这意味着本节介绍的三种绑定在Message或者Mixed安全模式下具有相同的客户端凭证类型集,并且默认采用Windows凭证。WSHttpBinding和WS2007HttpBinding安全相关的应用编程接口的定义反映在如下的代码片断中。

   1: public class WSHttpBinding : WSHttpBindingBase
   2: {
   3:     //其他成员
   4:     public WSHttpSecurity Security { get; set; }
   5: }
   6: public class WS2007HttpBinding:WSHttpBinding
   7: {
   8:     //省略成员
   9: }
  10: public sealed class WSHttpSecurity
  11: {
  12:     //其他成员
  13:     public SecurityMode                     Mode { get; set; }
  14:     public HttpTransportSecurity           Transport { get; set; }
  15:     public NonDualMessageSecurityOverHttp Message {get; set; }
  16: }
  17: public enum SecurityMode
  18: {
  19:     None,
  20:     Transport,
  21:     Message,
  22:     TransportWithMessageCredential
  23: }
  24: public sealed class HttpTransportSecurity
  25: {
  26:     //其他成员
  27:     public HttpClientCredentialType ClientCredentialType { get; set; }
  28: }
  29: public sealed class NonDualMessageSecurityOverHttp : MessageSecurityOverHttp
  30: {
  31:     //省略成员
  32: }

WSHttpBinding、WS2007HttpBinding和WSDualHttpBinding采用和BasicHttpBinding一样的编程方式和配置结构,所以在这里就对在对此进行重复介绍了。


作者:蒋金楠
微信公众账号:大内老A
微博: www.weibo.com/artech
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号 蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章
|
8月前
|
Windows
WCF服务端调用客户端.
WCF服务端调用客户端.
|
网络协议 安全 Windows
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
|
安全 网络协议 网络安全
WCF安全3-Transport与Message安全模式
WCF安全3-Transport与Message安全模式
107 0
WCF安全3-Transport与Message安全模式
|
存储 算法 安全
WCF安全2-非对称加密
WCF安全2-非对称加密
137 0
WCF安全2-非对称加密
|
安全 数据安全/隐私保护
WCF安全1-开篇
WCF安全1-开篇
106 0
WCF安全1-开篇
|
网络协议
WCF绑定的选择
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/8593924 格式与编码 每种标准绑定使用的传输协议与编码格式都不相同,如表1-1 所示。
604 0
|
监控
Wcf通讯基础框架方案(三)——客户端
假设定义了一个服务契约: [ServiceContract(Namespace = "WcfExtension.Services.Interface")] public interface ITestService { [OperationContract] ...
694 0
WCF绑定细节(2)——绑定,绑定元素
绑定这块引出了很多细节。绑定解决了消息交换中的传输协议,传输,编码等问题。如果要公开WCF服务,就要公开终结点Endpoint,WCF服务信息交换就是Endpoint之间的信息交换。终结点三大元素:ABC。
864 0
|
安全 网络架构
消息(7)——WCF编程模型中控制消息(1)绑定,契约
WCF服务要通过终结点来进行通信,终结点三大构成元素:ABC,其中的B,binding是重中之重,它解决了在消息交换过程中的编码,传输协议,安全等问题。 绑定是分层的,一个绑定对象对应一组有序的绑定元素的集合。
751 0
|
XML 安全 网络协议
WCF入门(一)——终结点,地址,绑定(1)
运行WCF服务 这里通过自宿主方式self-host来运行wcf服务。 公开终结点Endpoint,终结点由ServiceEndpoint 类来实现。它有很多的成员。其中要用到的是所说的ABC。 Address,Binding,Contract,地址,绑定,契约。
1015 0