У меня есть веб-приложение (размещенное в IIS), которое взаимодействует со службой Windows. Служба Windows использует веб-API ASP.Net MVC (самодостаточно размещенный), поэтому с ним можно обмениваться данными через http с помощью JSON. Веб-приложение сконфигурировано для выполнения олицетворения, идея состоит в том, что пользователь, который отправляет запрос веб-приложению, должен быть пользователем, которого веб-приложение использует для выполнения запроса к службе. Структура выглядит так:
(Пользователь, выделенный красным цветом, является пользователем, на который ссылаются в примерах ниже.)
Веб-приложение отправляет запросы в службу Windows, используя HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Это делает запрос к службе Windows, но не передает учетные данные правильно (служба сообщает пользователю как IIS APPPOOL\ASP.NET 4.0
). Это не то, что я хочу, чтобы произошло .
Если я изменю приведенный выше код, чтобы использовать WebClient
вместо него, учетные данные пользователя передаются правильно:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
С помощью приведенного выше кода служба сообщает о пользователе как о пользователе, который сделал запрос к веб-приложению.
Что я делаю не так с HttpClient
реализацией, из-за которой он не проходит учетные данные правильно (или это ошибка с HttpClient
)?
Причина, по которой я хочу использовать это, HttpClient
заключается в том, что у него есть асинхронный API, который хорошо работает с Task
s, тогда как WebClient
асинхронный API s должен обрабатываться с событиями.
DownloadStringTaskAsync
.Net 4.5, который также можно использовать с async / await
HttpClient
не имеет SetCredentials()
метода. Можете ли вы указать мне, что вы имеете в виду?
new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, UseDefaultCredentials = true }
на веб-сервере, к которому обращается пользователь, прошедший проверку подлинности Windows, и после этого веб-сайт действительно прошел проверку подлинности для другого удаленного ресурса (не прошел проверку подлинности без установленного флага).