首页 > 解决方案 > 安全性(JWT NodeJS)的大问题,所有访问权限的一个令牌

问题描述

我的 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',
    });
  }
};

标签: javascriptnode.jsrestjwt

解决方案


我认为最好的解决方案是创建中间件来检查发件人的 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"})
})


推荐阅读