如何使用HttpWebRequest使用匿名NTLM对HTTP请求进行身份验证

时间:2011-01-24 20:59:16

标签: c# .net httpwebrequest ntlm anonymous

我的团队最近在我们的一些服务代码中发现了一个错误,例如使用匿名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会抛出一个异常,表明无法模拟匿名令牌。

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

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

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