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

11

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

2) 在机器B上,我创建了一个Asp.net Web应用程序。在此应用程序中,我尝试使用先前在另一台计算机上托管的MachineA的WCF服务。当我从Visual Studio环境运行此Web应用程序时,它会访问MachineA的WCF服务并获取数据。

--- 到此为止还好 ---

3) 在机器B上 - 现在我在IIS 5.1中托管了我的Web应用程序。该Web应用程序在此处正常工作,但无法访问MachineA的WCF服务并显示以下错误:

远程服务器返回错误:(401) 未经授权。

StackTrace [MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate,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>
2个回答

7

打开IIS,找到“基本设置”,添加你的权限和机器的权限。有时你可能无法访问网络中的某些边界。

  • 打开“开始 | 设置 | 控制面板 | 管理工具 | 本地安全策略”。
  • 进入“本地策略 | 安全选项”
  • 选择网络安全:Lan Manager身份验证级别
  • 在“下拉菜单”中选择第二个值:发送LM&NTLM.........

此外,ClientCredentialType=Windows 会使身份验证头变成 Negotiate,但这并不足以与 Negotiate, NTLM 配合使用。

然而,设置 client.ClientCredentials.Windows.AllowNTLM = True 将必要的NTLM添加到身份验证头中,这样就可以正常工作了。

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


3
AllowNTLM已被弃用,它要求我在本地设置策略?我该怎么做? - guiomie
你好,我有一个类似的情况。你最终解决了这个问题吗? - Donald N. Mafa

0
我的解决方案是将ClientCredentialType="Ntlm"设置为NTLM。

在解决方案中,您在哪里设置此ClientCredentialType? - Shivani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接