WCF安全
一個強大的WCF服務安全係統,擁有兩種安全模式或級彆預期的客戶端可以訪問的服務。這是常見的分布式事務的安全威脅正在放緩,在很大程度上由WCF決定。
關鍵的安全功能
WCF服務有四個主要的安全功能,如下圖所示。
-
認證- 這裡認證是不限定於識彆消息的發送者,但是相互的,即消息接收器的認證是必需的,以排除任何種類的中間人攻擊的可能性。
-
授權- 這是采取了一個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>
這裡,必須指出的是,傳輸安全模式具有超過該消息的安全級彆的邊緣,因為前者是更快。它不需要任何額外的編碼,並提供互操作性的支持,並且因此不會降低整體性能。
然而,從安全角度考慮,將消息安全模式是更加健壯,並且獨立的協議,並提供端到端的安全性。