我很想知道如何在不需要用户的情况下实现简单的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
路由上使用网址查询,因此我不确定这是如何运作的。
答案 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();
}
逻辑很简单:
API-TOKEN
值。next
函数来抛出错误。next()
来继续下一个请求处理程序。然后你会这样使用它:
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"。