【问题标题】:How to make HTTP request authenticated with anonymous NTLM using HttpWebRequest如何使用 HttpWebRequest 使用匿名 NTLM 对 HTTP 请求进行身份验证
【发布时间】:2011-01-24 20:59:15
【问题描述】:

我的团队最近在我们的一些服务代码中发现了一个错误,例如使用匿名 NTLM SID 进行身份验证的 HTTP 请求(与 HTTP 匿名身份验证相同;这是一次成功的 NTLM 身份验证交换导致匿名 SID)在本应被拒绝时被允许继续。我们已经通过检查 WindowsIdentity.IsAnonymous 属性解决了这个问题,但我想为这种情况编写一个自动化测试,这样我们就再也不会遇到这个问题了。

这导致了我的问题。我需要使用 HttpWebRequest 或 Microsoft.HttpClient 向特定 URL 发出 HTTP GET 请求,后者通过 NTLM 作为匿名 SID 进行身份验证。到目前为止,我能做到这一点的唯一方法是将客户端代码作为 LocalSystem 运行;出于显而易见的原因,这对于我们的自动化测试机制来说并不理想。

我试过了:

using (WindowsIdentity.GetAnonymous().Impersonate()) { 
    //Make HTTP request here, with UseDefaultCredentials = true
}

但是 Impersonate 会抛出异常,表明无法模拟匿名令牌。

还有其他想法吗?

【问题讨论】:

    标签: c# .net httpwebrequest ntlm anonymous


    【解决方案1】:

    我认为您只需将UseDefaultCredentials 设置为false:

    request.Credentials = null;
    request.UseDefaultCredentials = false;
    

    【讨论】:

    • 这似乎不起作用。我写了一个测试,使用 Fiddler 我可以看到它生成的 HTTP 请求。它不是使用带有匿名令牌的 NTLM,而是使 HTTP 客户端不使用身份验证,因此当服务器发回 NTLM 质询时,客户端放弃了。
    • 我不确定我是否理解“带有匿名令牌的 NTLM”和“HTTP 客户端不使用身份验证”之间的区别。我们中的一个人显然对匿名帐户的工作方式感到困惑;)
    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 2022-06-12
    • 2023-03-10
    • 2018-04-29
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多