Simple Express JS API令牌

时间:2018-06-03 17:06:28

标签: node.js express

我很想知道如何在不需要用户的情况下实现简单的API身份验证令牌?我只想要一个令牌,我可以通过在调用我的API时将其添加为参数进行身份验证。

Google上目前的所有示例似乎都是根据我的需求进行过度设计的。我有一些数据存储在MongoDB中,我只是像这样提供这些数据:

  app.get("/", (req, res) => {
    Car.find((err, cars) => {
      if(err){
        throw err;
      }
      res.json({"cars": cars});
    });
  });

是否可以添加一些简单的中间件来检查我的环境文件中是否有名为api_token的元素。然后检查我的env文件中的api_token是否与作为URL查询传递的参数匹配。

有办法做到这一点吗?我知道您无法在GET路由上使用网址查询,因此我不确定这是如何运作的。

2 个答案:

答案 0 :(得分:1)

当然,请使用中间件:https://expressjs.com/en/guide/using-middleware.html

对于您的情况,它可以简单如下:

// checkForApiToken.js
module.exports = (req, res, next) => {
  const apiToken = req.header("api-token");
  if (process.env.API_TOKEN !== apiToken) {
      next(new Error("Unauthorized."));
      return;
  }
  next();
}

逻辑很简单:

  1. 从标题中检索API-TOKEN值。
  2. 检查它是否符合我在环境中定义的内容。
    • 不匹配,通过将错误对象传递到next函数来抛出错误。
  3. 匹配,所以我没有错误地调用next()来继续下一个请求处理程序。
  4. 然后你会这样使用它:

    app.get("/", checkForApiToken, async (req, res) => {
        const cars = await Car.find().exec();
        res.json({ cars });
    });
    

答案 1 :(得分:1)

请记住,Tokens负责至少2个API安全性强制性事务,进行身份验证和授权。您不需要对用户进行身份验证,但您需要确保您收到的令牌是令牌,而不是" HEADER"。

如果你使用静态令牌或其他任何东西,我第一次获得你的令牌时你的安全性就会下降。当此令牌死亡时,您需要指定AT LEAST,如果它是基于某个随机分配的有效令牌,则需要指定。您无法检查它是否存在,您需要检查它是否有效。

Javascript有一个惊人的会议背景,只要你有机会,遵循惯例。它似乎更容易实现基于JWT。

请按照:https://github.com/auth0/node-jsonwebtoken

并按照您的意愿在中间件中实现它。

很容易就像这个/

jwt.sign({ exp: Math.floor(Date.now() / 1000) + (60 * 60), data: 'foobar' }, 'secret');

jwt.verify(token, 'shhhhh', function(err, decoded) { console.log(decoded.foo) // bar });

您可以随时使用" Web HEADER"重做概念。并称之为" TOKEN"。但正如我所说,它是一个" Web Header"不是" WEB TOKEN"。