【问题标题】:HttpWebRequest 401 with NTLM Authenticiation带有 NTLM 身份验证的 HttpWebRequest 401
【发布时间】:2012-03-05 00:49:29
【问题描述】:

我在向网络服务器验证 HttpWebRequest 时遇到困难。我收到的响应只是一个 401。我已确保我在 C# 端正确设置了凭据,并且 IIS 已正确设置为允许 NTLM 身份验证。我不知道这是否重要,但他的计算机与 Web 服务器不在同一个域中。

我确定用户/密码是正确的,但是否需要在用户上配置任何其他授权设置?

如果我启用基本身份验证并禁用 Windows 身份验证,则请求会完美运行(当然需要更改正确的 C# 代码)。

我错过了什么?

    webRequest.UseDefaultCredentials = false;
    webRequest.PreAuthenticate = true;
    var c = new NetworkCredential("User", "password", "domain");

    CredentialCache credentialCache = new CredentialCache();
    credentialCache.Add(new Uri(Url), "NTLM", c);
    webRequest.Credentials = credentialCache;

这是我在 IIS 中设置的快照。

失败的请求跟踪:

【问题讨论】:

    标签: c# httpwebrequest authorization ntlm http-status-code-401


    【解决方案1】:

    在同事的帮助下,我们能够确定 Windows 处理身份验证的方式存在问题。看起来本地安全中的设置是错误的。将 本地策略 > 安全选项 > 网络访问:本地帐户的共享和安全模型从仅限访客更改 - 本地用户以访客身份验证为经典解决了问题。

    【讨论】:

      【解决方案2】:

      凭证缓存行的值是多少,

      CredentialCache credentialCache = new CredentialCache();
      credentialCache.Add(new Uri(Url), "NTLM", c);
      

      为什么不简单设置

      webRequest.Credentials = c;
      

      401.2 可能意味着您要连接的 Web 服务器未启用 NTLM(根据您的屏幕截图似乎是这样),或者您的客户端和 Web 服务器之间存在代理

      【讨论】:

      • 是的,你可以这样做。两者都一样。
      • 我通过 VPN 发出请求,会不会有问题?
      • 这可能是问题,是的,这取决于很多事情,但是是的,它可能与 NTLM 质询/响应机制混淆。您能否从网络内部测试代码,看看是否有什么不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2011-04-12
      • 2019-12-05
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多