c# - 为什么在使用正确的凭据发出 HttpWebRequest 时得到 401 Unauthorized?

标签 c# asp.net authentication

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

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

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

webRequest.GetResponse() 等等……

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

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

我也试过:

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

这总是会导致错误:

“远程服务器返回错误:(401) 未经授权。”

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

最佳答案

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

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

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

关于c# - 为什么在使用正确的凭据发出 HttpWebRequest 时得到 401 Unauthorized?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307709/

相关文章:

c# - Streamwriter 仅从字符串列表中写入一定数量的字节

c# - Visual Studio 永远不会在 Controller 操作中遇到断点

c# - C#单元测试中的双向列表比较

ios - phonegap for ios 中的 facebook 身份验证

java - 验证每个 Rest API 请求的访问 token 的最佳方式

c# - 我可以使用不同的 DataTrigger 绑定(bind)重用样式吗?

javascript - 握手期间 ASP.NET Core WebSocket 失败

c# - 如何从客户端浏览器中运行的 Angular Web 应用程序发送邮件?

asp.net - MVC-Mini-Profiler - Web 表单 - 找不到/mini-profiler-结果

php - Facebook 登录中重定向 URI 的严格模式