Как отправить учетные данные клиента для проверки подлинности Windows из клиентского приложения, чтобы гарантировать, что пользователь не является анонимным - PullRequest
2 голосов
/ 24 августа 2011

У меня есть клиентское приложение, которое пытается отправить запросы к размещенному веб-приложению 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()

Почему-то мне нужно убедиться, что учетные данные отправлены на сервер, чтобы сервер не видел клиентакак анонимныйЯ пытался отключить анонимную аутентификацию на сервере, но это вызывает еще одну ошибку (это еще одна проблема, о которой я бы не хотел здесь говорить; я уже опубликовал еще один вопрос по этому поводу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...