Аутентификация предотвращает публикацию в Classic ASP из веб-формы с использованием WebClient () из исходного кода

#asp.net #post #asp-classic #windows-authentication

#asp.net #Публикация #asp-classic #windows-проверка подлинности

Вопрос:

Я управляю старым веб-сайтом (сайтом, а не приложением), который представляет собой гибрид веб-форм и классического ASP. Классический ASP постепенно выводится из эксплуатации, но до этого, вероятно, еще год. Прямо сейчас мы отказываемся от старой формы аутентификации в пользу аутентификации Windows в web.config.

Проблема в том, что я пытаюсь опубликовать на классической странице из исходного кода веб-формы ( http://www.blahsiblah.com/index.aspx ) и получаю ошибку 401.

 var webClient = new WebClient();
var urlClassicASP = "http://www.blahsiblah.com/classic.asp";
var responseArray = webClient.UploadValues(urlClassicASP, "POST", nameValueCollection);
  

Это выдает сообщение «Удаленный сервер вернул ошибку: (401) неавторизованный».

Мой вопрос в том, как я могу опубликовать на классической странице, не вызывая аутентификацию на стороне dotNet?

Ответ №1:

Есть несколько способов добиться этого, вот простое предложение, которое, я надеюсь, поможет

.Net Используйте 127.0.0.1 (или ваш внутренний 192.169 / 10.1 *) IP для отправки на страницу по сравнению с общедоступным URL Добавьте параметр (назовите его ‘bypassauth’ или что-то уникальное) при отправке запроса на страницу ASP Добавьте параметр, который идентифицирует пользователя, прошедшего аутентификацию в .Сетевая сторона

ASP Находит include, в котором выполняется проверка подлинности, и в этой проверке добавляет другое условие перед возвратом 401, которое проверяет две вещи: 1) Запрос с локального / внутреннего IP 2) Имеет параметр bypassauth 3) идентификатор пользователя действителен

Таким образом, ваш старый ASP-код по-прежнему будет продолжать работать при запросе из браузера и ожидать, что пользователь будет аутентифицирован, однако при отправке запроса из .net это позволит вам обойти аутентификацию

Я уверен, что есть и другие идеи, но это всего лишь один подход

Ответ №2:

Мое решение состояло в том, чтобы установить:

 webClient.UseDefaultCredentials = true;