【问题标题】:Why do I get a 401 Unauthorized when making a HttpWebRequest with the correct credentials?为什么在使用正确的凭据发出 HttpWebRequest 时会收到 401 Unauthorized?
【发布时间】:2010-07-22 10:07:09
【问题描述】:

我有一个外部站点的 url 和一个用户名和密码。 如果我通过浏览器访问 URL,则会弹出一个身份验证框。我给它用户名和密码,我就可以进入页面了。

我正在尝试使用 HttpWebRequest 对象通过代码实现同样的目的:

var webRequest = (HttpWebRequest)WebRequest.Create(url);

webRequest.GetResponse() 等等……

这曾经在网站所有者为网站添加一些保护并为我提供用户名和密码之前工作。 WebRequest 有一个凭据属性,我一直设置如下:

webRequest.Credentials = new NetworkCredential("username", "password")

我也试过了:

webRequest.Credentials = new NetworkCredential("username", "password", “url domain”)

这总是会导致错误:

“远程服务器返回错误:(401) Unauthorized.”

我是否遗漏了一些明显的东西?

【问题讨论】:

  • 我不知道问题出在哪里,也不知道该接受哪种解决方案。外部主机在那里改变了一些东西,这意味着我必须做一些完全不同的事情。我想删除这个。
  • 我敢打赌,该 url 将转到 domain.com 并且服务器重定向到类似 domain.com/sites/home.aspx 的页面并且没有通过凭据。

标签: c# asp.net authentication


【解决方案1】:

根据资源的身份验证模型,使用System.Net.NetworkCredential 可能无效。了解远程站点使用的模型会很有帮助。

OpenID、表单身份验证和集成 Windows 身份验证的工作方式都不同。您可以尝试使用@Christoph 和@Lex 描述的工具推断他们使用的身份验证方法,或者直接联系远程网站提供商。

如果远程站点使用协商协议,例如 Kerberos 或 NTLM,那么您遇到的行为确实很奇怪;但是,其他一些协议可能需要您以另一种方式进行。

【讨论】:

    【解决方案2】:

    如果您使用 HTTP,请简单地使用 Microsoft Network Monitor 或 Wireshark 来捕获从 Web 服务器返回的 401 消息类型。它可以是 401.3 或另一个实际上有其他含义的错误代码。

    【讨论】:

      【解决方案3】:

      如果没有隐私问题,您可能希望发布您尝试访问的网址。

      如果 URL 格式错误,或引用无效页面(或无效页面 + 参数组合),您有时会看到类似这样的服务器错误。

      我使用密歇根州的一个旧版网络应用程序,每次我尝试使用错误的页面参数访问页面时,它都会引发 400 个样式错误。

      【讨论】:

        【解决方案4】:

        您是否在 Web 服务器上使用请求过滤?你能检查一下设置为拒绝的不同动词吗?

        【讨论】:

          【解决方案5】:

          尝试使用 fiddler (www.fiddler2.com) 调试您的请求。

          因此您必须启动 Fiddler,并将代理设置添加到您的请求中:

          webRequest.Proxy = New WebProxy("http://127.0.0.1:8888")
          

          【讨论】:

          • 使用 Fiddler 并非易事。网络监视器或 Wireshark 更容易。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-07
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 1970-01-01
          • 2015-04-01
          相关资源
          最近更新 更多