HTTP 请求未经客户端身份验证方案“协商”授权

Posted

技术标签:

【中文标题】HTTP 请求未经客户端身份验证方案“协商”授权【英文标题】:The HTTP request is unauthorized with client authentication scheme 'Negotiate' 【发布时间】:2012-04-10 18:36:22 【问题描述】:

1) 在机器 A 上 - 我创建了 WCF 服务并将其托管在机器 A 上的 IIS 5.1 上。它在此 URL http://mydomain/SetupPOCService/Service1.svc 下运行

2) 在机器 B 上 - 我创建了一个 Asp.net Web Applciation。在这个应用程序中,我尝试使用之前创建的 WCF 服务,该服务现在托管在另一个 m/c 上,即 MachineA。 当我从 Visual Studio 环境运行这个 Web 应用程序时,它会访问 MachineA 的 WCF 服务并获取数据。

---到这里为止---

3) 在机器 B 上 - 现在我在 IIS5.1 中托管了我的 Web 应用程序 此 Web 应用程序在这里运行良好,但无法访问 MachineA 的 WCF 服务并出现此类错误。

远程服务器返回错误:(401) Unauthorized.

堆栈跟踪 [MessageSecurityException:HTTP 请求未通过客户端身份验证方案“协商”进行授权。从服务器收到的身份验证标头是“协商,NTLM”。]

我尝试了很多东西,但都没有帮助。 请提供您的意见...

下面是客户端的 Web.Config

 <security mode="TransportCredentialOnly">
  <transport clientCredentialType="Windows" proxyCredentialType="None"
   realm="" />
  <message clientCredentialType="UserName" algorithmSuite="Default" />
 </security>

下面是服务器的 Web.Config

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
 </behavior>

【问题讨论】:

【参考方案1】:

转到 IIS。你会发现一些叫做“基本设置”的东西。添加您的权限和机器的权限。可能是您不允许访问网络中的某些边界。

转到“开始 | 设置 | 控制面板 | 管理工具 | 本地安全设置”。 转到当地政策 |安全选项 选择网络安全:Lan Manager 身份验证级别 在“Drop Down”中选择第二个值 Send LM & NTLM.........

还有ClientCredentialType=Windows 使身份验证标头Negotiate,这还不足以使其与Negotiate, NTLM 一起使用

但是,设置 client.ClientCredentials.Windows.AllowNTLM = True 会将必要的 NTLM 添加到身份验证标头中,并且可以正常工作。

还可以尝试以管理员身份运行 VS,以防万一。 :)

【讨论】:

AllowNTLM 已弃用,它说我应该在本地设置策略?我该怎么做? 您好,我也有类似的情况。你有没有得到这个工作?【参考方案2】:

我的解决方案是设置ClientCredentialType="Ntlm"

【讨论】:

解决方案中这个ClientCredentialType在哪里设置?

以上是关于HTTP 请求未经客户端身份验证方案“协商”授权的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“协商,NTLM”

HTTP 请求未经客户端身份验证方案“Ntlm”授权

HTTP 请求未经客户端身份验证方案“匿名”授权。使用 wsdl 文件

异常 = HTTP 请求未经客户端身份验证方案“匿名”授权

客户端身份验证方案“匿名”的 HTTP 请求未经授权?

HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头为“基本领域 =”