Я пытаюсь получить доступ к файлу на веб-сайте с использованием HttpClient, но я получаю 401 Unauthorized.Проверка подлинности Windows не работает с HttpClient
Веб-сайт настроен с
<authentication mode="Windows" />
...
<authorization>
<allow users="*" />
</authorization>
И IIS настроен для проверки подлинности Windows только.
Я могу получить доступ к файлу с помощью Internet Explorer, указав адрес в URL-адресе, и я НЕ запрашиваю имя пользователя/пароль.
При попытке выполнить «тот же» с использованием HttpClient я получаю 401 Unauthorized.
var httpClientHandler = new HttpClientHandler { UseDefaultCredentials = true };
using (var httpClient = new HttpClient(httpClientHandler))
{
var response = httpClient.GetAsync("http://example.com/welcome.png");
// The response is 401 Unauthorized.
}
Что я делаю неправильно?
UPDATE:
Он работает при использовании обычной проверки подлинности и указания httpClientHandler.Credentials = новый NetworkCredential («DOMAIN \ my.name», «мойпароль»), но, само собой разумеется, что это не вариант. Требуется проверка подлинности Windows и отсутствие необходимости указывать имя пользователя/пароль.
Да, я упомянул IE, чтобы доказать, что установка IIS работает. Я обнаружил, что он работает с Basic Authentication при указании httpClientHandler.Credentials = new NetworkCredential («DOMAIN \\ my.name», «mypassword»), но мне нужно, чтобы он работал без необходимости «вручную» указывать учетные данные и с помощью WinAuth. Я прочитал статью, с которой вы связались, но мне не удалось понять, что, по-вашему, мне не хватает? Я указал UseDefaultCredentials = true. defaultWindowsCredentials и privateNetworkClientServer, похоже, связаны с Windows Phone, и я работаю над приложением WPF. – Morzy
Ну, я мало знаю о WPF API. Я думаю, вы могли бы использовать WebRequestHandler, как указано в разделе комментариев здесь - http://www.asp.net/web-api/overview/security/integrated-windows-authentication ------------ ---------------------------------------- WebRequestHandler handler = new WebRequestHandler() { AllowAutoRedirect = false, UseProxy = false, Credentials = System.Net.CredentialCache.DefaultNetworkCredentials }; Клиент HttpClient = новый HttpClient (обработчик) -------------------------- – Roshith