2014-09-01 2 views
1

Я пытаюсь получить доступ к файлу на веб-сайте с использованием 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 и отсутствие необходимости указывать имя пользователя/пароль.

ответ

0

Вы можете просмотреть файл в IE, поскольку вы уже вошли в систему, и IE позаботится о передаче токенов/билетов (сгенерированных после успешного входа) на сервер для прохождения через проверку подлинности Windows.

Вы можете обратиться к MSDN и выяснить, как пройти через проверку подлинности Windows, используя HTTPClient http://social.msdn.microsoft.com/Forums/windowsapps/en-US/78c981f4-9dc6-4785-a8ff-f8e90d7c93b7/is-there-a-way-to-get-windows-authentication-with-httpclient

+0

Да, я упомянул IE, чтобы доказать, что установка IIS работает. Я обнаружил, что он работает с Basic Authentication при указании httpClientHandler.Credentials = new NetworkCredential («DOMAIN \\ my.name», «mypassword»), но мне нужно, чтобы он работал без необходимости «вручную» указывать учетные данные и с помощью WinAuth. Я прочитал статью, с которой вы связались, но мне не удалось понять, что, по-вашему, мне не хватает? Я указал UseDefaultCredentials = true. defaultWindowsCredentials и privateNetworkClientServer, похоже, связаны с Windows Phone, и я работаю над приложением WPF. – Morzy

+0

Ну, я мало знаю о 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

Смежные вопросы