HTTP请求未经授权使用客户端身份验证方案'Ntlm'.从服务器收到的身份验证标头是"Negotiate,NTLM"

Mik*_*oud 19 .net c# wcf soap

我查看了大量的SO文章,甚至是其他网站,但似乎无法使这项服务正常运行.我有一个我想要点击的SOAP服务,它的配置如下:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
        <binding name="PROVIDERSSoapBinding">
            <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
            </security>
        </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://xxx.xx.xx.xxx:9011/provider/services/PROVIDERS"
            binding="basicHttpBinding" bindingConfiguration="PROVIDERSSoapBinding"
            contract="ServiceReference1.ProviderRemote" name="PROVIDERS" />
    </client>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

但是,从我的控制台应用程序中点击它时出现以下错误:

HTTP请求未经授权使用客户端身份验证方案'Ntlm'.从服务器收到的身份验证标头是"Negotiate,NTLM".

有人可以帮帮我吗?

Cha*_*nga 10

尝试将'clientCredentialType'设置为'Windows'而不是'Ntlm'.

我认为这就是服务器所期望的 - 即当它说服务器期望"Negotiate,NTLM"时,实际上意味着Windows Auth,它将尝试使用Kerberos(如果可用),或者如果没有则返回NTLM(因此'谈判')

我的基础是在以下几行之间进行阅读:选择凭证类型


Dav*_*tin 8

您可以使用wftech消除客户端问题,这是一个旧工具,但我发现它在诊断身份验证问题时很有用.wfetch允许您指定NTLM,Negotiate和kerberos,这可能会帮助您更好地理解您的问题.当您尝试调用服务并且wfetch对WCF一无所知时,我建议将端点绑定(PROVIDERSSoapBinding)应用于serviceMetadata,然后您可以使用相同的安全设置对服务执行WSDL的HTTP GET.

您可以使用的另一个选项是强制服务器使用NTLM,您可以通过编辑元数据库(IIS 6)和删除Negotiate设置来执行此操作,有关详细信息,请访问http://support.microsoft.com/ kb/215383.

如果您使用的是IIS 7.x,那么方法略有不同,有关如何配置身份验证提供程序的详细信息,请访问http://www.iis.net/configreference/system.webserver/security/authentication/windowsauthentication.

我注意到你用xxx.xx.xx.xxx阻止了服务器地址,所以我猜这是一个IP地址而不是服务器名称,这可能会导致身份验证问题,所以如果可能的话尝试瞄准机器名称.

对不起,我没有给你答案,而是更接近问题的指示,但我希望它有所帮助.

我最后说我遇到了同样的问题而且我唯一的办法是使用Kerberos而不是NTLM,不要忘记如果你沿着这条路走下去,你需要为服务注册一个SPN.


ash*_*ash 6

如果您的客户端和服务都安装在同一台机器上,并且您遇到了正确(阅读:在其他地方尝试和测试过)客户端和服务配置的问题,那么这可能值得检查。

检查主机文件中的主机条目

%windir%/system32/drivers/etc/hosts

检查您是否正在使用主机名访问 Web 服务,并且该主机名是否已与上述主机文件中的 IP 地址相关联。如果是,NTLM/Windows 凭据将不会从客户端传递到服务,因为对该主机名的任何请求都将在机器级别再次路由。

尝试以下任一方法

  • 从主机文件中删除该主机名的主机条目
  • 或者
  • 如果无法删除主机条目,请尝试使用其他主机名访问您的服务。您也可以尝试使用 IP 地址而不是主机名

编辑:不知何故,上述情况与负载平衡方案相关。但是,如果无法删除主机条目,则禁用机器上的环回检查会有所帮助。参考文章https://support.microsoft.com/en-us/kb/896861中的方法 2

  • 知道这一点非常有用,到目前为止,我已经两次在同一个盒子上调用其他服务的服务引起了我的注意:) (2认同)