2011-01-26 96 views
0

我有一個WCF服務將由託管在Web服務器上的應用程序調用(對於中短期來說,我們只需要一個Web服務器,因此無視可伸縮性問題)保護在公共MVC2中託管的WCF應用程序

網絡服務器提供公共網站。在example.com

WCF服務暴露了調用,其中包括運行作業,並提供Web模型不支持的某些管理功能,例如長時間運行的數據庫操作。

WCF服務必須託管在網站內部,因爲它使用兼容模式來利用Asp.Net http管道 - 具體來說,該服務可以生成電子郵件,並使用MVC對電子郵件進行模板化。其中一個副作用是呼叫必須使用公開可見的主機名,例如https://example.com/JobService.svc,以便電子郵件中的鏈接指向example.com而不是localhost或類似鏈接。

顯然,我不希望普通大衆能夠啓動作業/管理任務,所以我想保護WCF服務。

由於依賴於Asp.net http管道,我只能使用https而不是net.tcp或類似的綁定。

我必須綁定到可公開訪問的IP地址,以便能夠使用正確的主機名(除非有人知道解決的辦法?)

我無法使用Kerberos/NTLM作爲服務器不在域(和NTLM弱反正)

,因爲它抱怨我不能使用證書:

The SSL settings for the service 'SslRequireCert' does not match those of the IIS 'None'. 

注:我不太明白這是網站本身只通過HTTPS服務。 http只是通過https返回一個重定向到同一頁面。我有一個有趣的問題是,儘管mex是通過https服務的,但WSDL中的URL使用http。我假設這是一個副作用,不能正確設置TLS我的服務,所以它認爲它是http即使它也響應https)

因此,我正在用盡如何確保我的服務的想法。當然,我可以從服務內部檢查請求並確定它是否來自當前服務器使用的IP - 但這種感覺非常令人討厭,我實際上忽視了專家的工作,並試圖將其中的某些內容地方 - 不是一個很好的開始。

任何人都可以提出一種方法來限制對本地計算機上的進程訪問此服務嗎?

我附上了我目前的配置。 (這是目前給我上面提到的證書錯誤)

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="WebJobServiceHTTPBinding" openTimeout="00:10:00" 
       sendTimeout="00:10:00"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Certificate" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" 
           aspNetCompatibilityEnabled="true"> 
     <serviceActivations> 
      <add relativeAddress="WebJob.svc" 
       service="MyApp.WebJobService" 
       factory="MyApp.WCFDIServiceHostFactory" /> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
    <services> 
     <service behaviorConfiguration="WebJobServiceBehavior" name="MyApp.WebJobService"> 
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="WebJobServiceHTTPBinding" 
       name="HTTPEndpoint" contract="MyApp.JobService.Common.IWebJobService" /> 
     </service> 
    </services> 
    <standardEndpoints> 
     <mexEndpoint> 
      <standardEndpoint name="WebJobServiceMex" /> 
     </mexEndpoint> 
    </standardEndpoints> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="WebJobServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceCredentials> 
        <serviceCertificate findValue="[Thumbprint of x509 cert used by website for SSL]" 
         storeName="Root" x509FindType="FindByThumbprint" /> 
       </serviceCredentials> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

回答

0

最後,我被迫實現了我自己的身份驗證系統。這是相對簡單的,因爲認證隱含授權 - 即沒有權限級別。也就是說,我仍然對解決方案感到不滿,如果還有其他選擇,它會改變它。

0

「任何人都可以提出一個方法來限制程序在本地計算機上訪問此服務?」

如果您還沒有在IIS中的其他網站上運行您的服務。

您可以將IIS中的服務綁定到允許內部LAN客戶端訪問服務而不是外部客戶端的內部網絡IP地址。

另一個綁定選項是綁定到防火牆上未打開的端口,以便僅允許來自內部客戶端的訪問。更好的是,綁定到防火牆上未打開的端口,綁定到內部LAN IP。

您也可以嘗試綁定到IP地址127.0.0.1。

+0

感謝您的回答,但除非我誤解,否則不能解決我的問題。我無法使用其他網站 - 我需要能夠通過我的WCF服務發送與網站上的用戶操作相同的電子郵件。我不想每次定義電子郵件兩次,因爲這不會幹。根據我的問題(127.0.0.1 = localhost)中解釋的原因,綁定到127.0.0.1將不起作用。 – Basic 2011-01-27 11:08:09

相關問題