2011-04-29 159 views
1

我在控制檯應用程序和訪問其操作的Web應用程序上託管了WCF服務。我已經搜索了WCF安全性,並且在大多數情況下,Web服務託管在IIS上。爲了在我的情況下實現WCF傳輸層安全,我應該遵循什麼要點?保護WCF服務

我要的是

  1. 使用用戶名和密碼來執行WCF操作
  2. 使用SSL來加密數據。

如果我的WCF服務託管在控制檯應用程序上。我應該製作任何IIS配置嗎?

回答

2

如果您的WCF服務託管在控制檯應用程序中,則IIS與它們無關,因此您無需配置IIS或任何其他內容。

爲了具有傳輸層安全性,可以將WsHttp或NetTcp綁定與SSL結合使用。

看看http://www.dotnetspark.com/kb/1502-security-wcf--transport-level.aspxhttp://www.packtpub.com/article/microsoft-wcf-securityhttp://dotnetrobert.com/?q=node/140

+0

netTcpBinding默認是安全的(需要Windows身份驗證,消息簽名和加密) – lnu 2011-04-29 07:35:32

3

如果要公開通過HTTP WCF服務,您可以使用basicHttpBinding的自定義配置:

<bindings> 
    <basicHttpBinding> 
    <binding name="secured"> 
     <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="userName" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="securedService"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Namespace.Type, assembly" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

<services> 
    <service name="Namespace.Type" behaviorConfiguration="securedService"> 
    <host> 
     <baseAddresses> 
     <!-- some url --> 
     <baseAddress baseAddress="https://localhost:8088/Service" /> 
     </baseAddresses> 
    </host> 
    <endpoint address="" contract="Namespace.Type" binding="basicHttpBinding" bindingConfiguration="secured" /> 
    <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpsBinding" /> 
    </service> 
</services> 

此使用HTTPS和用戶名令牌配置文件的消息在運輸憑證將創建SOAP 1.1服務。它還將通過HTTPS公開元數據(WSDL),用戶名和密碼將通過custom validator進行驗證。默認驗證驗證Windows帳戶,但也可以重新配置爲使用ASP.NET成員資格提供程序。

您需要做的最後一件事是允許使用端口上的HTTPS(在本例中爲8088)。爲此,您需要在機器上的證書存儲中安裝私鑰的證書(應位於LocalMachine的「我的/私人」商店中)。您可以創建self signed certificate用於測試目的。

一旦您擁有證書,您必須使用netsh assign the certificate to the port。您還應該使用netsh allow application to listen on the port,否則您的控制檯應用程序將不得不以管理員身份運行(UAC - Windows Vista,7,2008,2008 R2)。