从 IIS Express 访问远程 Web 服务会导致 403 被禁止

本文关键字:禁止 服务 Web Express IIS 访问 | 更新日期: 2023-09-27 18:37:28

当我尝试从在IIS Express上运行的Web应用程序连接到Intranet Web服务时,该Web服务返回403禁止访问。当我通过单元测试或从卡西尼号上运行的同一站点或服务器上的 IIS 7.5 下访问时,该服务可以正常工作。我的直觉告诉我这是一个配置问题,但我不确定从哪里开始寻找。

当从 IIS Express 上运行的站点访问远程 Web 服务时,什么会导致该服务返回 403 禁止访问?

澄清一下,我正在访问的服务不是基于SOAP的。我正在设置一个特定的网络凭据并将其与我的请求一起传递,以下代码说明了这一点。

protected XDocument Search(Uri requestUri)
{
    var nc = new NetworkCredential(this.config.ServiceUserName,
        this.config.ServicePassword);
    var cCache = new CredentialCache();
    cCache.Add(requestUri, "Basic", nc);
    var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
    request.Credentials = cCache;
    request.PreAuthenticate = true;
    request.Method = WebRequestMethods.Http.Get;
    var response = (HttpWebResponse)request.GetResponse();
    return XDocument.Load(new StreamReader(response.GetResponseStream()));
}

从 IIS Express 访问远程 Web 服务会导致 403 被禁止

Web 服务端使用 Windows 身份验证时您/将要遇到的问题列表:

  • 正如Cheeso指出的那样,您的要求可能只是在匿名(或本地)帐户下运行。这可能是由于在没有模拟调用用户的情况下运行,并且进程本身在错误的帐户下运行,或者用户被认为是匿名的,并且请求被切换到该特殊的本地"匿名"帐户。
  • 当您通过启用传入用户的模拟来修复上述问题时,会遇到"NTLM 一跳地狱"问题 - 传入凭据不能在其他服务器上使用(Kerberos 是一种解决方案,但在大多数情况下不太可能可用)。
  • 当您通过禁用模拟(或在 Process 帐户而不是传入用户帐户下运行代码)并使 Process 在域帐户(或实际具有 Web 服务权限的其他帐户)下运行来修复第一个问题时,您可能会遇到这样一个事实,即您可能会为用户获取 Thay 也不应访问的数据打开可能性。

本质上,您需要确定哪个帐户可以/应该访问 Web 服务,并运行在该帐户下访问 Web 服务的代码。帐户必须在本地登录(不能使用传入用户的标识)。

我现在没有时间深入研究原因,但我可以说这与我的代理设置有关。为我的盒子切换到不同的代理提供商缓解了这个问题。这个内部事务应该一起绕过代理,为什么IIS的行为与其他机制不同,这超出了我的范围。不情愿地,我将将此标记为答案,并希望检查代理设置的小通知对某人有所帮助。抱歉,这不是更具体的。