在上一篇文章中,我们详细地介绍了BasicHttpBinding具有怎样的安全模式的支持,已经在各种安全模式下分别可以采用怎样的客户端凭证。接下来我们来进一步分析另外三个基于HTTP的绑定,即WSHttpBinding、WS2007HttpBinding和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安全相关的应用编程接口的定义体现在如下所示的代码片断中。
2: {
//其他成员
public MessageSecurityOverHttp Message { get; set; }
public WSDualHttpSecurityMode Mode {get; set; }
6: }
class MessageSecurityOverHttp
8: {
//其他成员
public MessageCredentialType ClientCredentialType { get; set; }
11: }
enum MessageCredentialType
13: {
14: None,
15: Windows,
16: UserName,
17: Certificate,
18: IssuedToken
19: }
enum WSDualHttpSecurityMode
21: {
22: None,
23: Message
24: }