2010-05-05 172 views
4

我正在訪問第三方WCF服務(我無權訪問服務配置)我們正在使用SSL證書進行身份驗證。WCF身份驗證錯誤

試圖訪問任意所提供的方法

HTTP請求是未經授權的客戶端身份驗證方案「協商」的時候,我得到這個錯誤。從服務器接收到的 認證報頭是「協商,NTLM

我查了許多谷歌的鏈接和沒有運氣這麼遠也不知道還有什麼檢查我的身邊。

編輯

下面是配置

<system.serviceModel> 
     <bindings> 
      <wsHttpBinding> 
       <binding name="wsHttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" 
        transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
        allowCookies="false"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" 
         enabled="false" /> 
        <security mode="Transport"> 
         <transport clientCredentialType="Windows" proxyCredentialType="None" 
          realm="" /> 
         <message clientCredentialType="Windows" negotiateServiceCredential="true" 
          establishSecurityContext="true" /> 
        </security> 
       </binding> 
      </wsHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://url" 
       binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" 
       contract="IApiWS" name="wsHttpBinding"> 
      </endpoint> 
     </client> 
</system.serviceModel>
+0

你可以顯示你試圖訪問該服務的代碼,它看起來像是要求NTLM身份驗證 – Pharabus 2010-05-05 18:03:29

+0

@Prabrabus:你想讓我粘貼什麼?客戶端配置或一些C#代碼?我會說我訪問Web服務的代碼是不相關的。我沒有什麼用處可以展示。只是調用一個類的方法:-(沒有安全設置 – StackOverflower 2010-05-05 18:08:49

+0

你需要一些安全設置來通過WCF服務請求的身份驗證 – Pharabus 2010-05-05 18:20:11

回答

1

好吧,這可能是一個有點含糊,所以我aplogise提前,本質上是服務器是在告訴你,你沒有被授權,通常這你會添加如下代碼到你生成的代理

svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 

其中svc是您生成的代理。我也在一個配置錯誤的IIS託管端點上看到了這一點,虛擬文件​​夾沒有允許匿名設置(儘管你說你不能訪問服務配置,因此可能不會有幫助)。希望這有助於

編輯增加了更多的信息,

可能,這取決於安全性,一個設置類似於下面可能會更加有用

svc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Anonymous; 

編輯2 在配置上面顯示,您正在使用的wsHttpBinding將Windows設置爲clientCredentialtype進行傳輸安全性和用戶身份驗證,這意味着您將通過當前登錄的用戶的憑據發送到使用NTLM進行身份驗證的服務(因爲negotiateServiceCredentials爲true),您是否已確認登錄的用戶有ri ghts服務?

+0

@Prabrabus:謝謝,但沒有運氣。通過第二種設置,我得到「TokenImpersonationLevel.Anonymous級別不支持認證。」。第一個沒有區別。請考慮我正在使用SSL證書進行身份驗證。 – StackOverflower 2010-05-05 19:04:09

+0

@Timmy O'Tool。是的,我確實看到了SSL,但我不確定這是否是問題,但是如果沒有具體的信息,服務器期望什麼樣的身份驗證以及客戶端如何配置,這非常困難。 – Pharabus 2010-05-05 19:13:40

2

嘗試設置你的clientCredentialType="Windows"clientCredentialType="Certificate"我通常使用硬編碼的WCF配置,沒有配置文件,所以我真的不知道這一點,但無論哪種方式,來看看下面的鏈接:Selecting a Credential Type MSDN上。

祝你好運。我很驚訝你連接到什麼/沒有給出明確的端點連接指示,但是,嘿,你在處理第三方的東西時會處理各種事情。

+1

+1感謝您的幫助,但我已經測試了您的建議(此時我應該仔細檢查,因爲我測試了很多東西)。我使用svcutil.exe生成代理。該工具生成配置(理論上)需要粘貼到web.config上。但在這種情況下,生成的配置看起來不準確。 – StackOverflower 2010-05-06 18:56:01

+0

'svcutil.exe'不能完成100%的工作。並非客戶端應用程序需要知道的所有內容都是由服務元數據提供的,因此您經常需要手動調整客戶端配置。 – 2010-09-06 17:48:02