#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;