У меня есть клиентское приложение, которое пытается отправить запросы к размещенному веб-приложению IIS7.Клиент должен отправить свою личность для участия в аутентификации Windows.Это похоже на то, как IE отправляет учетные данные пользователя с помощью встроенной системы безопасности Windows.Мне нужно такое же поведение в клиентском приложении C # .net.
Клиент отправляет запросы с использованием класса WebRequest:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://webhost/resources/a"));
request.Method = method;
request.MaximumAutomaticRedirections = 10;
request.UseDefaultCredentials = true;
Это не работает, так как при попытке олицетворения насервер использует код вроде:
WindowsIdentity windowsIdentity = (WindowsIdentity)HttpContext.Current.User.Identity;
using (windowsIdentity.Impersonate())
{
// do stuff
}
возникает исключение:
2011-08-24 15:42:12,949 [63] ERROR - Error occurred responding to PUT request for http://webhost:1234/resources/a. System.InvalidOperationException: An anonymous identity cannot perform an impersonation.
at System.Security.Principal.WindowsIdentity.Impersonate(StackCrawlMark& stackMark)
at System.Security.Principal.WindowsIdentity.Impersonate()
Почему-то мне нужно убедиться, что учетные данные отправлены на сервер, чтобы сервер не видел клиентакак анонимныйЯ пытался отключить анонимную аутентификацию на сервере, но это вызывает еще одну ошибку (это еще одна проблема, о которой я бы не хотел здесь говорить; я уже опубликовал еще один вопрос по этому поводу).