javascript - 安全性大问题(JWT Node JS),一个 token 用于所有访问

标签 javascript node.js rest jwt

我的网络应用程序的安全性存在很大的问题。 当用户登录我的应用程序时,我实现了 JWT token (REST API 返回 token )。

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

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

当我搜索 userId = 1 时,我执行 GET 操作:/api/users/1 并且我有关于用户 1 的信息。但我可以执行操作/api/users/2、3 等。

全部用一个 token 。如何保护它?

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

最佳答案

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

关于javascript - 安全性大问题(JWT Node JS),一个 token 用于所有访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54367792/

相关文章:

javascript - 为什么标签/文本没有在此 d3.js 散点图上呈现?

javascript - 最好的图表/图形 js 插件是什么?

javascript - 从本地目录加载文件?

javascript - 使用 socket.io 进行实时搜索

rest - 如果用户想要对其个人资料和个人资料图片执行操作,客户端是否应该为 API 发送两个不同的 HTTP 请求

javascript - jQuery 没有在一个非常简单的 HTML 页面上加载

python - “coroutine”对象没有属性 get || pyppeteer

java - SocketCluster - 无法从 Android 应用程序连接到服务器 - 连接被拒绝

rest - Grails列出 Restful 资源返回意外结果

json - 没有 html 标签的 Wordpress Restful Api