安全性大问题(JWT NodeJS),所有访问权限都使用一个令牌

时间:2019-01-25 14:59:10

标签: javascript node.js rest jwt

我的Web应用程序的安全性有很大的问题。 当用户登录到我的应用程序时,我实现了JWT令牌(REST API返回令牌)。

在我的jwt令牌中,我只有用户ID。问题是,当我想登录ID = 1的用户时,

我可以使用相同的令牌查看并执行所有其他用户的休息操作。例如:

当我发现userId = 1时,我正在执行GET操作:/ api / users / 1,并且获得了有关用户1的信息。但是我可以执行/ api / users / 2、3等操作。

全部带有一个令牌。如何保护它?

const jwt = require('jsonwebtoken');
const env = require('../config/env.config.js');

module.exports = (req, res, next) => {
  try {
    const token = req.headers.authorization.split(' ')[1];
    const decoded = jwt.verify(token, env.SECRET_KEY);
    req.userData = decoded;
    next();
  } catch (error) {
    return res.status(401).json({
      message: 'Auth failed',
    });
  }
};

1 个答案:

答案 0 :(得分:2)

我认为最好的解决方案是创建一个中间件,该中间件检查发件人的ID并将其附加到路由,类似于波纹管

const middleware = (req, res, next) => {
  const id = req.params.id || req.body.id || req.query.id
  if (req.userData.id === id) {
    next()
  } else {
    res.status(403).send({message: "forbidden"})
  }
}
router.get("/api/users/:id", middleware, (req, res) => {
  // do your staff
  res.send({message: "ok"})
})
router.put("/api/users/:id", middleware, (req, res) => {
  // do your staff
  res.send({message: "ok"})
})