我将尽量让这个问题尽可能简短,因为这个问题对我来说有点棘手。如果不清楚,请询问任何疑问。所以,你走了,
这是我在工作时遇到的错误信息, “HTTP请求未经授权使用客户端身份验证方案'Ntlm'。从服务器收到的身份验证头是'Negotiate,NTLM'。远程服务器返回错误:(401)Unathorized”
我有两个Windows框,Box1和Box2。我在每个IIS 6中都有2个WCF服务(ServiceA和ServiceB)。从功能上讲,ServiceA只与db通信。 ServiceB与ServiceA进行对话并获得结果。这两种服务都启用了匿名访问和集成Windows身份验证。 ServiceA在Application Pool ServiceAPool下运行,ServiceB在ServiceBPool下运行。每个应用程序池都配置了域用户的标识。 这些应用程序池在Box1和Box2上完全相同。
首先,我的客户端应用程序(只是一个小型控制台应用程序),使用我的Windows凭据调用Box1上的ServiceA。它有效。
其次,我的客户端应用程序使用我的Windows凭据调用Box1上的ServiceB。此ServiceB在内部使用域用户(应用程序池标识)调用ServiceA。它可以正常工作。
我上面提到的第二点不适用于Box2,它给出了上述错误。需要明确的是,包括web.config文件等在内的服务代码在两个框中完全相同。应用程序池的域用户是相同的。两个框都在同一个域中。
我观察到的(可能),在Box2上,当我使用我的Windows凭据呼叫ServiceA时,它可以工作,但是当服务与其他域帐户(例如我的应用程序池帐户)之间有跳时,它会失败上面的错误。
如果有人见过这种行为,请分享一些信息。
答案 0 :(得分:1)
我想回答一下我自己的问题。 事实证明这是一个friggin注册表项更新,以使身份验证工作正常。基本上它是关于禁用“DisableLoopbackCheck”值。更多信息可以在
找到http://support.microsoft.com/default.aspx?scid=kb;EN-US;926642