2009-08-23 65 views
6

我正在運行一個WCF服務,除此之外,它被用作網站的後端。由於Web站點和WCF服務都在同一臺機器上運行,爲了提高性能,我使用netTcpBinding進行設置。netTcpBinding最快可能的安全配置是什麼?

現在的事情是,因爲它們存在於同一個盒子裏,我真的不關心傳輸級別的安全或消息級加密;消息被攔截的唯一可能方式是如果有人進入Web服務器本身,並且如果他們這樣做,我已經遇到了更大的問題。

所以我的問題是:當客戶端和服務器已經在受信任的子系統上時,可以使用什麼配置來確保netTcpBinding儘可能快?

當然,答案可能是使用「none」的安全性。但在我的特殊情況下,我仍然需要對自定義數據庫使用UserName身份驗證。可以配置它,以便它仍然使用UserName身份驗證,但不打擾證書或保護端點之間的數據?或者,我可能需要實現一個自定義SOAP頭的自定義行爲來存儲用戶名/密碼,然後我真的可以將安全性設置爲「無」?

服務器配置

<netTcpBinding> 
    <binding name="Net_Tcp_Binding"> 
     <security mode="Message"> 
      <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </netTcpBinding> 

它使用自定義的用戶名認證 - 基本上每一個電話驗證&授權針對自定義數據庫。在服務端還採用了證書與客戶,如洽談:

<serviceBehaviors> 
    <behavior name="MyBehavior"> 
    <serviceMetadata httpGetEnabled="true" /> 
    <serviceDebug includeExceptionDetailInFaults="true" /> 
    <serviceAuthorization principalPermissionMode="Custom"> 
     <authorizationPolicies> 
     <add policyType="MyAssembly.CustomAuthorizationPolicy,MyAssembly" /> 
     </authorizationPolicies> 
    </serviceAuthorization> 
    <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyAssembly.CustomCredentialValidator,MyAssembly" /> 
     <serviceCertificate x509FindType="FindBySubjectName" findValue="CN=servercert" storeLocation="LocalMachine" storeName="My" /> 
    </serviceCredentials> 
    </behavior> 
</serviceBehaviors> 

客戶端配置

<netTcpBinding> 
    <binding name="Net_Tcp_Endpoint"> 
    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
    <security mode="Message"> 
     <message clientCredentialType="UserName" /> 
    </security> 
    </binding> 
</netTcpBinding> 

回答

4

「無」 將是最快的,是:-)

在另一方面,如果你的服務和後端運行在同一臺機器上,你應該仔細看看netNamedPipe綁定,如果你有「機器上」的通信,這是絕對最佳的。它比netTcp更快更高效。

爲了根據服務驗證調用者,您需要使用一些安全方法 - 因爲netNamedPipe只支持「none」或「Windows」,所以我會選擇Windows。如果你使用none,你無法識別(認證)調用者,因此你不能根據調用者的身份進行授權(誰可以做什麼)。

驗證調用者(誰在給我打電話)後,就可以使用Windows組或內置的ASP.NET成員資格/角色提供程序子系統來執行基於角色的授權,以便使確定誰可以做什麼操作。這可以在服務配置的行爲部分中使用名爲<serviceAuthoritzation>的服務行爲進行配置。

Marc