Подтвердить что ты не робот

Создание веб-запроса на веб-страницу, для которой требуется проверка подлинности Windows

Я пытаюсь сделать запрос на веб-страницу, используя класс 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-адрес. Но, видимо, этого не происходит.

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

request.Credentials = CredentialCache.DefaultCredentials;

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

request.Credentials = new NetworkCredential(user, pwd, domain);

Ответ 3

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

request.Credentials = CredentialCache.DefaultNetworkCredentials;

Ответ 4

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