Моя группа недавно обнаружила ошибку в некоторых из наших сервисных кодов, например, HTTP-запрос аутентифицирован с анонимным NTLM SID (не то же самое, что и HTTP-анонимная аутентификация; это успешный обмен аутентификацией NTLM, который приводит к анонимный SID) было разрешено продолжить, хотя от него следовало отказаться. Мы устранили проблему, проверив свойство WindowsIdentity.IsAnonymous, но я хочу написать автоматический тест для этого случая, чтобы эта проблема больше никогда не возникала.
Что приводит меня к моей проблеме. Мне нужно сделать HTTP-запрос GET на конкретный URL-адрес, используя HttpWebRequest или Microsoft.HttpClient, который аутентифицируется через NTLM как анонимный SID. Пока что единственный способ добиться этого - запустить клиентский код как LocalSystem; по очевидным причинам это не идеально для нашего автоматизированного режима тестирования.
Я пробовал это:
using (WindowsIdentity.GetAnonymous().Impersonate()) {
//Make HTTP request here, with UseDefaultCredentials = true
}
но Impersonate выдает исключение, указывающее, что анонимный токен не может быть олицетворен.
Есть другие идеи?