调用Web服务时,出现以下错误:
客户端身份验证方案“ NTLM”未授权HTTP请求。从服务器收到的身份验证标头是“ NTLM”。客户端身份验证方案“ NTLM”未授权HTTP请求。从服务器收到的身份验证标头是“ NTLM”。
我在IIS(7)上都有一个调用WCF Web服务的Silverlight 4应用程序。我的WCF Web服务使用NTLM(Windows身份验证)调用安装在其他Web服务器上的另一个ASMX Web服务。我的两个服务器和托管ASMX Web服务的服务器都在同一域中。
当Silverlight客户端从服务器打开应用程序时,http://localhost/MySiteName
一切正常。但是,当Silverlight客户端使用另一个客户端(不是服务器,但仍在同一域)打开应用程序时,http://MyServerName/MySiteName
出现错误。
我的IIS中启用了Windows身份验证。我的IIS中禁用了匿名身份验证。
调用我的WCF Web服务的绑定配置为:
<binding name="winAuthBasicHttpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
调用ASMX Web服务的绑定配置为:
<binding name="ClNtlmBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" />
</security>
</binding>
好,这是我想到的事情:
my WCF web service calls another ASMX web service, installed on a **different** web server
Ntlm
为Windows
并再次测试。好,关于冒充的几句话。基本上,这是一个已知问题,您不能使用到一台服务器的模拟令牌来传递给另一台服务器。原因似乎是令牌是使用用户密码的一种哈希,并且对于从中生成的计算机有效,因此无法在中间服务器中使用。
在WCF下可以进行委派(即,将模拟从一台服务器转发到另一台服务器)。在这里看这个话题。
谢谢。当我将域用户设置为应用程序池时,它运行良好,但是现在我对WS的所有调用都在应用程序池域用户下执行。我不能使用模拟方式来调用ASMX ws,因此该调用是在客户端的用户安全令牌下执行的吗?
顺便说一句,我忘了提到当与特定用户(登录到客户端的同一用户)一起使用模拟时,一切工作正常:client = new ClCustomersServiceClient(); client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; client.ClientCredentials.Windows.ClientCredential =新的NetworkCredential(“用户名”,“密码”,“域”); 响应= client.ClCustomersQuery(request);
好吧,您正在WCF服务器上使用用户名密码来模拟ASMX服务器。这是可能的,但您不能通过用于WCF和ASMX的Windows身份验证。
Aliostad-感谢您的帮助。