2010-03-19 53 views
2

我已經編寫了一個使用.net 3.5 WebService的WPF 4.0窗口應用程序。當託管Web服務以允許匿名連接時,這可以正常工作,但是我們上線時需要使用的WebService將保存在啓用了集成身份驗證的網站中。從WPF窗口應用程序中使用集成身份驗證的WebService

運行WPF應用程序的人將登錄到與Web服務器位於同一域中的計算機上,並且如果使用NTLM的Web瀏覽器瀏覽WebService(無需輸入任何認證信息),將有權查看WebService auth啓用。

是否可以通過運行應用程序的已登錄用戶的詳細信息傳遞給WebService?

這是我目前使用的代碼:

MyWebService.SearchSoapClient client = new SearchSoapClient(); 
//From the research I've done I think I need to something with these: 
//UserName.PreAuthenticate = true; 
//System.Net.CredentialCache.DefaultCredentials; 
List<Person> result = client.FuzzySearch("This is my search string").ToList(); 

任何指針讚賞。

以下是錯誤消息我得到當呼叫正在做:

的HTTP請求是未經授權 客戶端身份驗證方案 「匿名」。從服務器收到的驗證報頭 ' 'Negotiate,NTLM,Digest qop =「auth」,algorithm = MD5-sess,nonce =「+升級+ v17 {hashremoved}」,charset = utf-8,realm =「消化」'。

回答

5

所以事實證明,解決這個問題對我而言非常簡單。

在在app.config文件的WebService綁定配置,我改變了這一點:

<security mode="None"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
<message clientCredentialType="UserName" algorithmSuite="Default" /> 
</security> 

要這樣:

<security mode="TransportCredentialOnly"> 
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> 
<message clientCredentialType="UserName" algorithmSuite="Default" /> 
</security> 

注意,我改變了模式和clientCredentialType屬性。

並在代碼後面我加入這一行調用該方法的WebService的面前:

client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 
相關問題