Почтальон просит получить код состояния HTTP 401 - PullRequest
0 голосов
/ 29 октября 2018

Я работаю над созданием API REST Node.js с использованием модуля Express, который перенаправляет запросы HTTP GET и PUT на другой сервер. Однако при выполнении тестовых запросов в Postman я всегда получаю HTTP 401 неавторизованные ответы. Тем не менее, когда я пытаюсь сделать то же самое при запросе в браузере Chrome, я получаю успешный ответ (HTTP 302). Я прочитал некоторую документацию по циклу запросов / ответов HTTP и авторизации. Сервер, на который я перенаправляю, использует HTTP-аутентификацию Basic. В моем коде я перенаправляю вызов API на сервер приложений, используя метод res.redirect (сервер). В своем запросе почтальона я задаю имя пользователя / пароль на вкладке Авторизация для моего запроса. Я знаю, что это кодируется с использованием base64, но я предполагаю, что это не передается на редирект, когда это делается через Почтальон.

Следующие фрагменты кода показывают, что я создал до сих пор.

Это экспресс-маршрут, который я создал для запросов GET

app.get('/companyrecords/:name', function(req, res) {

  var credentials = Buffer.from("username:password").toString('base64');
  console.log(req);
  var requestURL = helperFunctions.createURL(req);

  res.redirect(requestURL);
});

Я определяю функцию createURL внутри файла с именем helperFunctions. Назначение этой функции - настроить URL, на который будут направлены запросы. Вот код этой функции.

module.exports.createURL = function (requestURL) {
  var pathname = requestURL._parsedUrl.pathname;
  var tablename = pathname.split("/")[1];
  var filter = `?&filter=name=\'${requestURL.params.hostname}\'`;

  var fullPath = BASE_URL + tablename.concat('/') + filter;

  console.log(fullPath);
  return fullPath;
}

Где BASE_URL - константа, определенная в следующем виде:

http://hostname:port/path/to/resource/

Это то, что мне нужно изменить в своем коде для поддержки перенаправлений через Postman, или есть настройка в Postman, которую мне нужно изменить, чтобы мои запросы могли успешно выполняться.

1 Ответ

0 голосов
/ 29 октября 2018

К сожалению, вы не можете сказать Почтальону не делать то, что, возможно, было правильно.

Эффективно клиенты должны удалять заголовки авторизации при перенаправлении. Это сделано для того, чтобы человек-посредник не вставил 302 и не собрал все свои имена пользователей и пароли на своем собственном сервере. Однако, как вы заметили, многие клиенты не ведут себя идеально (и с тех пор поддерживают это поведение по старым причинам).

Как обсуждено здесь однако у вас есть несколько вариантов:

  • Разрешить дополнительный способ авторизации с использованием строки запроса: res.redirect(302, 'http://appServer:5001/?auth=auth') однако это не очень хорошо, поскольку строки запроса часто регистрируются без редактирования
  • Выступите в роли прокси-сервера и направьте аутентифицированный запрос самостоятельно: http.request(authedRequest).on('response', (response) => response.pipe(res))
  • Ответьте с 200 и ссылкой для вашего клиента, чтобы затем следовать.
...