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