閱讀371 返回首頁    go 阿裏雲 go 技術社區[雲棲]


[WCF安全係列]綁定、安全模式與客戶端憑證類型:WSHttpBinding與WSDualHttpBinding

上一篇文章中,我們詳細地介紹了BasicHttpBinding具有怎樣的安全模式的支持,已經在各種安全模式下分別可以采用怎樣的客戶端憑證。接下來我們來進一步分析另外三個基於HTTP的綁定,即WSHttpBinding、WS2007HttpBinding和WSDualHttpBinding。考慮到它們之間在安全設置方麵的相關性,在這裏我們先來介紹WSDualHttpBinding。

我們在前麵提到過,WCF所有基於HTTP的綁定的Transport安全模式都是通過TLS/SSL(HTTPS)的方式來實現的。TLS/SSL如果要確保從A到B的安全連接,要求B是一個綁定了數字證書的HTTPS站點。正是由於這樣的原因,Transport安全模式不能應用於基於HTTP的雙向通信,因為服務端對客戶端的安全連接得不到保障。所以。

這樣的限製直接反映應用編程接口的定義上。我們通過WSDualHttpSecurity進行針對於WSDualHttpBinding的安全設置。WSDualHttpSecurity通過Mode屬性返回采用的安全模式。該屬性類型為WSDualHttpSecurityMode枚舉,定義其中的2兩個枚舉值表示WSDualHttpBinding支持的安全模式:None和Message。這也印證了關於的論點。在默認的情況下,WSDualHttpBinding采用安全模式。

正是因為WSDualHttpBinding隻提供針對於Message安全模式的支持,所以。用於進行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的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。其中,意味著。

WSHttpSecurity的Transport屬性返回一個HttpTransportSecurity類型的對象,用於進行Transport安全的相關設置。HttpTransportSecurity的ClientCredentialType屬性返回的是上麵我們提到過的HttpClientCredentialType枚舉。這意味著。所不同的是,。

而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
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號(原來公眾帳號蔣金楠的自媒體將會停用)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接

最後更新:2017-10-27 11:03:57

  上一篇:go  [WCF安全係列]綁定、安全模式與客戶端憑證類型:BasicHttpBinding
  下一篇:go  [WCF安全係列]綁定、安全模式與客戶端憑證類型:NetNamedPipeBinding、NetTcpBinding與NetMsmqBinding