我收到 401(拒绝访问)调用内部 Web 服务上的方法。我从我们公司 Intranet 上的 ASP.NET 页面调用它。我已经检查了所有配置,它应该使用具有访问该服务的帐户的集成安全性,但我试图弄清楚如何确认它在哪个帐户下连接。不幸的是,我无法在生产网络上调试代码。在我们的开发环境中,一切正常。我知道设置必须有所不同,但我不知道从哪里开始。有什么建议吗?
4 回答
您查看过 IIS 日志吗?
我还建议在服务器上的安全事件日志中查找身份验证失败。您应该在此处找到失败的授权尝试的足迹。但请注意 - 每秒获取 10 次安全事件并不罕见,因此理想情况下,您需要能够在请求失败时访问事件日志。
如果您在实例化 Web 服务时没有指定在 ASP.NET 页面中使用哪些凭据,那么我相信它默认为NT_Authority\Anonymous。
如果您使用 System.Net.CredentialCache,那么您的 Web 服务需要位于受信任的域中,通过 HTTPS 访问并使用 NTLM、Kerberos 或 Digest Auth,否则它不会从缓存中传递凭据。
http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultnetworkcredentials.aspx http://msdn.microsoft.com/en-us/library/system.net.credentialcache.defaultcredentials.aspx
也许生产服务器使用不同的用户作为其应用程序池而不是您的开发环境?我曾经花了一天时间弄清楚那个。另一种选择是在 web.config 中(缺少)模拟