C# · 12月 27, 2021

c# – HTTP请求是未经授权的客户端认证方案’Ntlm’

在调用Web服务时,会收到以下错误信息:

The HTTP request is unauthorized with client authentication scheme ‘NTLM’. The authentication header received from the server was ‘NTLM’. The HTTP request is unauthorized with client authentication scheme ‘NTLM’. The authentication header received from the server was ‘NTLM’.

我有一个Silverlight 4应用程序调用一个WCF Web服务,在我的IIS(7)上.
我的WCF Web服务使用NTLM(Windows身份验证)调用安装在不同Web服务器上的另一个ASMX Web服务.
我的这两个服务器和一个托管ASMX Web服务的服务器都在同一个域中.

当Silverlight客户端从服务器使用http:// localhost / MySiteName打开应用程序时,一切正常.但是当Silverlight客户端从不同的客户机(不是服务器但仍在同一个域中)打开应用程序时,使用http:// MyServerName / MySiteName然后我得到错误.

Windows身份验证在我的IIS中启用.
我的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>解决方法 好的,这些都是想到的事情:

>您可能在IIS上运行的WCF服务必须在具有调用Web Service的权限的安全上下文中运行.您需要在具有域用户的用户(理想情况下是专用用户)的应用程序池中确保.
>您不能使用模拟人员使用用户的安全令牌来传递回ASMX使用模拟,因为我的WCF Web服务调用另一个ASMX Web服务,安装在**不同的**网络服务器
>尝试将Ntlm更改为Windows并再次测试.

好的,假冒一些话.基本上这是一个已知的问题,您不能使用您到一台服务器的模拟令牌,传递给另一台服务器.原因似乎是令牌是使用用户密码的一种哈希,并且对于由此产生的机器是有效的,因此它不能从中间服务器使用.

UPDATE

根据WCF(即从服务器转发模拟到另一台服务器),授权是可能的.看这个话题here.