邮递员请求收到HTTP 401状态代码

时间:2018-10-29 18:25:52

标签: node.js google-chrome express postman

我正在使用Express模块​​创建一个Node.js REST API,该API将HTTP GET和PUT请求重定向到另一台服务器。但是,在Postman中运行测试查询时,我总是会收到HTTP 401未经授权的响应。但是,当我在Chrome浏览器上对查询进行相同的操作时,得到了成功的响应(HTTP 302)。我通读了一些有关HTTP请求/响应周期和授权的文档。我重定向到的服务器使用HTTP Basic身份验证。在我的代码中,我使用res.redirect(server)方法将API调用重定向到我的应用程序服务器。在我的邮递员请求中,我正在为我的请求在“授权”选项卡中设置用户名/密码。我知道这是使用base64进行编码的,但是我猜想通过Postman完成此操作时不会在重定向上传递它。

以下代码段显示了到目前为止我创建的内容。

这是我为GET请求创建的Express路由

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);
});

我在名为helperFunctions的文件中定义了一个名为createURL的函数。该功能的目的是设置将请求定向到的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 :(得分:0)

不幸的是,您不能告诉Postman不要做可以说是正确的事情。

有效地,客户端应该在重定向上删除授权标头。这是为了防止中间人将302插入并在自己的服务器上收集所有用户名和密码。但是,您已经注意到,许多客户端的行为并不完美(并且出于传统原因一直保持这种行为)。

here所述,但是您确实有一些选择:

  • 允许使用查询字符串进行授权的第二种方法:res.redirect(302, 'http://appServer:5001/?auth=auth')但这不是很好,因为查询字符串通常未经编辑就记录下来
  • 充当代理并通过管道发送已验证的请求:http.request(authedRequest).on('response', (response) => response.pipe(res))
  • 回复200和链接,然后让客户关注。
相关问题