2009-11-03 31 views
1

我有一個使用basicHTTP綁定的WCF服務。該服務的目標是在運行IIS 7.0的Windows Server 2008 64位的DMZ環境中在生產環境中部署 ,而在Active Directory域中則不是 。Internet上的WCF身份驗證

該服務將由業務合作伙伴通過Internet訪問,並提供SSL保護。本來, 我已經建成使用X.509消息認證用的WSHttpBinding和大量的 問題,我踢,並決定備份和使用basicHTTP與用戶名的身份驗證後,該服務。

結果:如我有證書的模式中接收完全相同的,模糊的錯誤消息。

服務完美的作品我們的領域內具有完全相同的認證,但只要 我把它移到DMZ我得到一個錯誤讀數:「無抵押或不正確安全的故障收到 從對方見內部FaultException爲故障代碼和詳細信息「。

內部異常信息是:「爲消息驗證安全時發生錯誤。」

的服務與綁定配置的web配置如下:

<services> 
    <service behaviorConfiguration="HSSanoviaFacade.Service1Behavior" name="HSSanoviaFacade.HSSanoviaFacade"> 
    <endpoint address="" binding="basicHttpBinding" contract="HSSanoviaFacade.IHSSanoviaFacade" bindingConfiguration="basicHttp"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://FULLY QUALIFIED HOST NAME CHANGED TO PROTECT/> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttp"> 
     <security mode="TransportWithMessageCredential"> 
    <message clientCredentialType="UserName" /> 
    </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="HSSanoviaFacade.Service1Behavior"> 
    <serviceMetadata httpsGetEnabled="True" /> 
     <serviceDebug includeExceptionDetailInFaults="True" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

是獲得誤差測試客戶端的配置:

<bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IHSSanoviaFacade" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="TransportWithMessageCredential"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://HOST NAME CHANGED TO PROTECT" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHSSanoviaFacade" 
      contract="MembersService.IHSSanoviaFacade" name="BasicHttpBinding_IHSSanoviaFacade" /> 
    </client> 

正如前面提到的,服務完美的作品在域生產IIS框不在域中。 我一直在調整,現在拉出我的頭髮2周,似乎沒有任何工作。如果任何人都可以幫助我 將不勝感激。甚至還提供了一個解決身份驗證的建議。我寧可不使用自定義 身份驗證方案,但使用內置的SOAP功能。

憑證傳遞直通代理即proxy.ClientCredentials.UserName.UserName和 proxy.ClientCredentials.UserName.Password是在測試環境 並作爲在DMZ IIS計算機帳戶兩者內部域有效的帳戶框。

回答

0

嗯,也許不是我想要的,但我得到它的工作。必須是域中的IIS與非IIS中的差異。

這裏是我的改變服務網絡配置:

<security mode="Transport"> 
    <transport clientCredentialType="Basic" /> 
</security> 

按我的理解,這並不憑據傳遞的SOAP頭,但在HTTP標頭,這意味着消息級安全性不在這種情況下工作。其全部由SSL證書保護。