WCF - 安全性



WCF服務擁有強大的安全系統,具有兩種安全模式或級別,確保只有預期的客戶端才能訪問服務。WCF在很大程度上緩解了分散式事務中常見的安全威脅。

關鍵安全特性

WCF服務具有四個關鍵安全特性,如下圖所示。

Wcf Security
  • 身份驗證 - 此處,身份驗證不僅限於識別訊息傳送者,而且是相互的,即需要對訊息接收者進行身份驗證,以排除任何中間人攻擊的可能性。

  • 授權 - 這是WCF服務為確保安全而採取的下一步,在此確定服務是否應授權呼叫者繼續執行操作。儘管授權不依賴於身份驗證,但它通常在身份驗證之後進行。

  • 機密性 - 呼叫者和服務之間的資訊交換保密,以限制未打算接收訊息的其他人對其進行解釋。為實現這一點,使用了加密以及各種其他機制。

  • 完整性 - 最終的關鍵概念是保持完整性,即確保訊息在從傳送方到接收方的傳輸過程中未被任何人篡改。

傳輸安全模式

WCF提供以下傳輸安全模式,以確保客戶端和伺服器之間安全的通訊。各種傳輸安全模式如下所示。

  • - 此模式不保證任何型別的訊息安全,並且服務不會獲得有關客戶端的任何憑據。此模式風險極高,因為它可能允許訊息篡改,因此不推薦使用。

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "None"/>
   </binding>
</wsHttpBinding>
  • 傳輸 - 此模式是透過使用TCP、IPC、Https和MSMQ等通訊協議實現安全訊息傳輸的最簡單方法。此模式在點對點傳輸時更有效,主要用於受控環境,即內聯網應用程式。

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Transport"/>
   </binding>
</wsHttpBinding>
  • 訊息 - 安全模式允許相互身份驗證,並在很大程度上提供隱私,因為訊息被加密並且可以透過http傳輸,而http不被認為是安全的協議。此處提供的安全是端到端的,而不考慮訊息傳輸中涉及多少中間體以及是否存在安全的傳輸。此模式通常由網際網路應用程式使用。

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Message"/>
   </binding>
</wsHttpBinding>
  • 混合 - 此安全模式不經常使用,並且客戶端身份驗證僅在客戶端級別提供。

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • 兩者 - 此安全模式包括傳輸安全和訊息安全,以提供強大的安全保護,但通常會導致整體效能過載。只有MSMQ支援此模式。

<netMsmqBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Both"/>
   </binding>
</netMsmqBinding>

除BasicHttpBinding之外的所有WCF繫結預設都具有一定程度的傳輸安全。

訊息安全級別

訊息級安全不依賴於WCF協議。它透過使用標準演算法加密資料來與訊息資料本身一起使用。對於訊息安全級別,有多種客戶端憑據可用於不同的繫結,這些將在下面討論。

WCF中訊息級安全的客戶端憑據

- 在這裡,使用加密來保護訊息,而無需執行客戶端身份驗證,這意味著匿名客戶端可以訪問服務。除BasicHttpBinding之外,所有WCF繫結都支援此客戶端憑據。但是需要注意的是,對於NetNamedPipeBinding,此客戶端憑據完全不可用。

  • Windows - 在這裡,對於即時登入的使用者,訊息加密和客戶端身份驗證都會發生。在這種情況下,與所有其他WCF繫結不同,NetNamedPipeBinding不可用,並且BasicHttpBinding也不支援。

  • 使用者名稱 - 在這裡,訊息被加密並透過提供使用者名稱來保護,並且客戶端經過身份驗證,因為他們需要提供密碼。與上述兩種客戶端憑據一樣,BasicHttpBinding不支援使用者名稱,並且對於NetNamedPipeBinding不可用。

  • 證書 - 除了訊息加密之外,客戶端和服務都透過證書進行身份驗證。此客戶端憑據可用,並且除NetNamedPipeBinding之外,所有WCF繫結都支援它。

  • 頒發令牌 - 使用來自Cardspace等授權機構的頒發令牌來驗證訊息。此處還會執行訊息加密。

以下程式碼顯示如何在WCF訊息安全級別/模式中配置客戶端憑據。

<netTcpBinding>
   <binding name = "WCFMessageSecurityExample">
      <security mode = "Message">
         <message clientCredentialType = "None"/>
      </security>   
   </binding>
</netTcpBinding>

<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>

這裡必須注意的是,傳輸安全模式優於訊息安全級別,因為前者更快。它不需要任何額外的編碼並提供互操作性支援,因此不會降低整體效能。

但是,從安全形度來看,訊息安全模式更強大,獨立於協議,並提供端到端安全。

廣告