WCF安全


一個強大的WCF服務安全系統,擁有兩種安全模式或級別預期的用戶端可以存取的服務。這是常見的分散式事務的安全威脅正在放緩,在很大程度上由WCF決定。

關鍵的安全功能

WCF服務有四個主要的安全功能,如下圖所示。

Wcf Security
  • 認證- 這裡認證是不限定於識別訊息的傳送者,但是相互的,即訊息接收器的認證是必需的,以排除任何種類的中間人攻擊的可能性。

  • 授權- 這是採取了一個WCF服務,以確保安全性的下一步驟,並在此確定服務是否應授權呼叫方進一步或不會進行。雖然授權不依賴於身份驗證時,它通常如下認證。

  • 保密 - 呼叫者和服務之間的資訊交流是保密的,限制其解釋並不打算為其他人公開訊息。為了使這成為可能,加密與各種各樣的其他機制一起使用。

  • 完整性- 最後一個關鍵概念是保持完整性,即提供了保證,該訊息尚未從傳送者到接收者不被任何人在這一過程篡改。

傳輸安全模式

WCF提供以下傳輸安全模式,以確保在客戶機和伺服器之間的安全通訊。多樣傳輸安全模式如下所述。

  • None - 此模式不能保證任何訊息安全和服務不獲取有關用戶端的任何憑據。這種模式是非常危險的,因為它可以使資訊被篡改,因此不推薦使用。

<wsHttpBinding>
   <binding name="WCFSecurityExample">
      <security mode="None"/>
   </binding>
</wsHttpBinding>
  • Transport - 這種模式是實現資訊通過使用通訊協定,如TCP,IPC,HTTPS和MSMQ一個安全的傳輸的最簡單方法。這種模式是比較有效的,當在傳輸點至點,並主要是用於在受控環境中,也就是說,內部網路應用。

<wsHttpBinding>
   <binding name="WCFSecurityExample">
      <security mode="Transport"/>
   </binding>
</wsHttpBinding>
  • Message - 安全模式可以相互驗證,並提供隱私的訊息進行加密,並且可以通過http,這不被認為是一種安全協定被傳輸在很大程度上。這裡的安全性提供了端 - 端,而不考慮有多少中介參與訊息傳送和是否有一個安全的運輸或沒有。該模式是通過網際網路應用程式通常使用。

 
<wsHttpBinding>
   <binding name="WCFSecurityExample">
      <security mode="Message"/>
   </binding>
</wsHttpBinding>
  • Mixed - 這種安全模式是不經常使用,用戶端身份驗證僅在用戶端級別提供。

 
<wsHttpBinding>
   <binding name="WCFSecurityExample">
      <security mode="TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • Both - 此安全方式包括兩種傳輸安全性和資訊的安全性,提供了健壯的安全蓋,但通常會導致超載的整體效能。這一個僅由MSMQ支援。

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

所有的WCF系結,除非有basicHttpBinding傳輸安全性預設情況下有一定關係。

訊息安全級別

訊息級安全性不依賴於WCF協定。它是通過使用一個標準的演算法對資料進行加密採用與訊息資料本身。有若干用戶端憑證可用於不同的系結的訊息的安全級別,這些將在下面討論。

WCF訊息級安全性的用戶端證書

None :在此,使用加密來保護該訊息而被執行,這意味著,該服務可以由一個匿名客戶存取沒有客戶機認證。除了basicHttpBinding,所有的WCF系結支援此用戶端憑據。然而,應當注意的是,對於NetNamedPipeBinding用戶端憑證不可用。

  • Windows - 在這裡無論是資訊的加密和認證的用戶端發生了一個實時登入的使用者。在此情況下,也不同於所有其他的WCF系結,NetNamedPipeBinding不可用以及basicHttpBinding不提供支援。

  • UserName - 這裡訊息被加密,以及通過提供使用者名固定,而用戶端進行認證,因為它們需要提供密碼。 basicHttpBinding就像上面的兩個用戶端憑證,不支援使用者名和它不適用於NetNamedPipeBinding。

  • Certificate - 隨著資訊加密,用戶端和服務獲得與證書的身份驗證。此用戶端證書可用,並且支援所有的WCF系結,除了NetNamedPipeBinding。

  • IssuedToken - 類似CardSpace從一個機構頒發的令牌用於驗證的訊息。這裡也進行訊息的加密。

下面的程式碼顯示了用戶端憑據如何組態WCF的資訊安全等級/模式。

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

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

這裡,必須指出的是,傳輸安全模式具有超過該訊息的安全級別的邊緣,因為前者是更快。它不需要任何額外的編碼,並提供互操作性的支援,並且因此不會降低整體效能。

然而,從安全形度考慮,將訊息安全模式是更加健壯,並且獨立的協定,並提供端到端的安全性。