温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - The HTTP request is unauthorized with client authentication scheme 'Ntlm'
.net c# silverlight wcf windows

c# - 客户端身份验证方案'Ntlm'对HTTP请求进行了未授权的操作

发布于 2020-06-15 15:55:54

调用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>

查看更多

提问者
kruvi
被浏览
24
Aliostad 2012-05-13 21:27

好,这是我想到的事情:

  • 大概在IIS上运行的WCF服务必须在具有调用Web服务特权的安全上下文下运行。您需要确保应用程序池中的用户是域用户-理想情况下是专用用户。
  • 您不能使用模拟来使用用户的安全令牌通过模拟将其传递回ASMX,因为 my WCF web service calls another ASMX web service, installed on a **different** web server
  • 尝试更改NtlmWindows并再次测试。

好,关于冒充的几句话。基本上,这是一个已知问题,您不能使用到一台服务器的模拟令牌来传递给另一台服务器。原因似乎是令牌是使用用户密码的一种哈希,并且对于从中生成的计算机有效,因此无法在中间服务器中使用。


更新

在WCF下可以进行委派(即,将模拟从一台服务器转发到另一台服务器)。这里看这个话题