C# HTTP请求未经客户端身份验证方案';协商;。从服务器接收的身份验证标头为';NTLM&x27;

C# HTTP请求未经客户端身份验证方案';协商;。从服务器接收的身份验证标头为';NTLM&x27;,c#,windows,wcf,authentication,C#,Windows,Wcf,Authentication,几天前,当在客户端和wcf web服务之间使用Windows身份验证时,我对身份验证问题感到非常头痛。我收到的错误是“HTTP请求未经客户端身份验证方案“协商”授权。从服务器收到的身份验证标头是“NTLM”“。堆栈上的解决方案都不起作用,因为它们大多数都与旧方法相关。答案:问题是,针对此类问题的所有帖子都与旧的kerberos和IIS问题相关,其中代理凭据或AllowNTLM属性有帮助。我的情况不同。经过数小时从地面抓取蠕虫后,我发现IIS安装在IIS Windows身份验证提供程序列表中没有包

几天前,当在客户端和wcf web服务之间使用Windows身份验证时,我对身份验证问题感到非常头痛。我收到的错误是“HTTP请求未经客户端身份验证方案“协商”授权。从服务器收到的身份验证标头是“NTLM”“。堆栈上的解决方案都不起作用,因为它们大多数都与旧方法相关。

答案:问题是,针对此类问题的所有帖子都与旧的kerberos和IIS问题相关,其中代理凭据或AllowNTLM属性有帮助。我的情况不同。经过数小时从地面抓取蠕虫后,我发现IIS安装在IIS Windows身份验证提供程序列表中没有包含协商提供程序。所以我不得不把它加起来,再往上爬。我的WCF服务开始按预期进行身份验证。下面是屏幕截图,如果您在匿名身份验证关闭的情况下使用Windows身份验证,

您需要右键单击Windows身份验证并选择“提供程序”菜单项


希望这有助于节省一些时间。

我的解决方案是将AppPool从使用AppPoolIdentity设置为NetworkService标识。

我已将旧版本的WCF升级为WCF 4,并做了以下更改,希望您也能做类似的更改

1。Web.config:


2。App.config:


对我来说,解决方案除了使用“Ntlm”作为凭证类型外:

    XxxSoapClient xxxClient = new XxxSoapClient();
    ApplyCredentials(userName, password, xxxClient.ClientCredentials);

    private static void ApplyCredentials(string userName, string password, ClientCredentials clientCredentials)
    {
        clientCredentials.UserName.UserName = userName;
        clientCredentials.UserName.Password = password;
        clientCredentials.Windows.ClientCredential.UserName = userName;
        clientCredentials.Windows.ClientCredential.Password = password;
        clientCredentials.Windows.AllowNtlm = true;
        clientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
    }  

这不是一个确切的问题,但这是谷歌搜索时的最高结果:

如果在调用托管在同一台计算机上的WCF服务时发现此问题,则可能需要填充
BackConnectionHostNames
注册表项

  • 在regedit中,找到并单击以下注册表子项:
    HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1\U 0
  • 右键单击
    MSV1\u 0
    ,指向新建,然后单击
    多字符串值
  • 在“名称”列中,键入
    BackConnectionHostNames
    ,然后按ENTER键
  • 右键单击
    BackConnectionHostNames
    ,然后单击修改。 在“值数据”框中,键入用于计算机上本地共享的CNAME或DNS别名,然后单击“确定”。
    • 在单独的行中键入每个主机名

  • 有关详细信息,请参阅。

    我也遇到了同样的问题,要解决这个问题,请在iis->操作侧栏->基本设置->连接为…->特定用户


    似乎与我现在遇到的问题相似。你能再贴一次照片吗?谢谢。你说的“再次发布图片”是什么意思?你在帖子中没有看到图片?对不起,这是代理的事情。。。这是一个链接,您应该添加自己的答案作为答案并接受它,以便人们可以投票支持:)。我在哪里可以找到此选项?在IIS中,身份验证设置不足这在客户端对我有效
    clientCredentials.Windows.AllowNtlm
    已过时