HTTP请求未经授权使用客户端身份验证方案"Negotiate"

use*_*938 10 authentication wcf windows-authentication

1)在机器A上 - 我在MachineA上创建了一个WCF服务并将其托管在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)未经授权.

StackTrace [MessageSecurityException:HTTP请求未经授权,客户端身份验证方案为"Negotiate".从服务器收到的身份验证标头是"Negotiate,NTLM".]

我尝试了很多东西,但它有助于提升.请提供您的意见......

下面是客户端的Web.Config

 <security mode="TransportCredentialOnly">
  <transport clientCredentialType="Windows" proxyCredentialType="None"
   realm="" />
  <message clientCredentialType="UserName" algorithmSuite="Default" />
 </security>
Run Code Online (Sandbox Code Playgroud)

下面是Web.Config for Server

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
 </behavior>
Run Code Online (Sandbox Code Playgroud)

Mil*_*lee 7

转到IIS.你会发现一种叫做"基本设置"的东西.添加您的权限和计算机的权限.您可能无法访问网络中的某些边界.

  • 转到"开始|设置|控制面板|管理工具|本地安全设置".
  • 转到本地政策| 安全选项
  • 选择网络安全:Lan Manager身份验证级别
  • 选择"下拉"中的第二个值发送LM和NTLM .........

还会ClientCredentialType=Windows生成身份验证标头Negotiate,这对于它来说还不够Negotiate, NTLM

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

另外,请尝试以管理员身份运行VS.以防万一.:)

  • AllowNTLM已被弃用,它说我应该在本地设置策略吗?我怎样才能做到这一点? (3认同)