Создание веб-запроса к веб-странице, которая требует проверки подлинности Windows - PullRequest
34 голосов
/ 25 августа 2010

Я пытаюсь сделать запрос к веб-странице, используя класс WebRequest в .net. URL, который я пытаюсь прочитать, требует проверки подлинности Windows, из-за которой я получаю несанкционированное исключение. Как я могу передать учетные данные Windows к этому запросу, чтобы он мог аутентифицироваться.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" );

request.Method = "GET";
request.UseDefaultCredentials = false;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "username", "password", "domain" );

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception

this.Response.Write( response.StatusCode );

Приведенный выше код возвращает следующую ошибку.

System.Net.WebException: The remote server returned an error: (401) Unauthorized.

При проверке сведений об исключении я заметил одну вещь: URL, к которому я пытаюсь получить доступ, перенаправляет на другой URL, который побуждает меня предоставить данные для входа в NT. Я считаю, что учетные данные должны быть также перенаправлены на этот URL. Но, видимо, этого не происходит.

Ответы [ 4 ]

39 голосов
/ 25 августа 2010

Необходимо использовать свойство Credentials для передачи учетных данных Windows веб-службе.

Если вы хотите передать учетные данные текущего пользователя Windows в службу,

request.Credentials = CredentialCache.DefaultCredentials;

должен сделать свое дело. В противном случае используйте NetworkCredential следующим образом:

request.Credentials = new NetworkCredential(user, pwd, domain);
9 голосов
/ 31 августа 2010

Я пытаюсь получить доступ к ссылке А, передающей учетные данные Windows.Ссылка A затем перенаправляет меня на ссылку B автоматически, но не передает учетные данные Windows, которые я предоставил.Отсюда и ошибка.Я сделал request.AutoRedirect = false и просматривал каждый раз, когда я получаю местоположение в заголовке, т.е. я делаю перенаправления вручную каждый раз, когда передаю учетные данные Windows.

Это сработало для меня:)

8 голосов
/ 24 октября 2011

Для аутентификации в WebService используйте DefaultNetworkCredentials вместо DefaultCredentials:

request.Credentials = CredentialCache.DefaultNetworkCredentials;
6 голосов
/ 15 марта 2016

Используя VS2015, request.UseDefaultCredentials = true; работает для меня!

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