2014-04-03 111 views
0

我已經構建了一個相當簡單的WCF服務,該服務在IIS 7.5實例上託管。我已經採取了必要措施來確保SSL證書啓用https。我已經解決了所有各種DNS設置,因此我現在可以在來自全世界的給定Https:// URL處打開我的WCF。目標是這樣的:對於將要發送數據到服務的大約5個客戶端的某種客戶端/服務器認證。什麼是保證這項服務的最佳方法?這一點非常簡單,只有一種方法。我相信web.config中會有一些變化以及代碼隱藏。示例非常感謝。支持HTTPS,IIS託管WCF服務,如何保護它?

這裏的web.config

<!-- language: lang-xml --> 
    <?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 

    <services> 
    <service name="wcflistener.Service1"> 
     <endpoint address=""   
     binding="basicHttpBinding" 
     bindingConfiguration="secureHttpBinding" 
     contract="wcflistener.IService1"/> 

     <endpoint address="mex" 
     binding="mexHttpsBinding" 
     contract="IMetadataExchange" /> 
    </service> 
    </services> 

    <bindings> 
    <basicHttpBinding> 
     <binding name="secureHttpBinding"> 
     <security mode="Transport"> 
      <transport clientCredentialType="None"/> 
     </security> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    </system.serviceModel> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
    To browse web app root directory during debugging, set the value below to true. 
    Set to false before deployment to avoid disclosing web app folder information. 
    --> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 

</configuration> 

而且非常簡單Service1.svc.cs

[DataContract] 
public class Service1 : IService1 
{ 


    public void SampleMethod(DataTable table, string name) 
    { 
     //sample method logic here 
    } 
} 

回答

0

在WCF中,有幾個可用的安全選項給你,所有有他們的優點/缺點:

  1. SSL +使用Windows身份驗證。 (因爲每個人都需要與同一個域控制器通信,所以這對於互聯網託管服務通常是困難的)
  2. SSL +用戶名/密碼:WCF可以方便地實現這一點,客戶端通過用戶名/密碼並且服務可以驗證值與預先配置的值並允許客戶進一步。
  3. 基於證書的認證:通常,客戶端可以獲得服務器證書的公鑰,以便他們可以使用該公鑰來調用服務。但這並不能完全識別客戶。任何人都可以得到你的公鑰。
  4. 相互證書或2路SSL:這是當客戶端有私鑰並將公鑰提供給服務時。反之亦然,即服務向客戶提供公鑰。

這取決於您需要的認證級別。對於極少數客戶來說,用戶名/密碼就足夠了。 (總是有丟失的風險)

對於主要客戶端2路SSL非常安全,因爲人們不會那麼容易丟失私鑰。

根據您的選擇,可以共享更多代碼示例。

對於選項#,請點擊此鏈接。 (你可以用你的SSL證書在下面的步驟)

http://codebetter.com/petervanooijen/2010/03/22/a-simple-wcf-service-with-username-password-authentication-the-things-they-don-t-tell-you/

+0

我敢肯定,現在,用戶名/密碼就足夠了。我控制方程中的所有部分,託管IIS等等。此時任何事情都是可能的。讓我們去選項#2 –

+0

添加一個鏈接,以執行用戶名/密碼認證的步驟 –

+0

作品像一個魅力,謝謝。 –