Большая проблема с безопасностью (JWT NodeJS), один токен для всех обращений - PullRequest
0 голосов
/ 25 января 2019

У меня действительно большая проблема с безопасностью в моем веб-приложении.Я реализовал токен JWT, когда пользователь входит в мое приложение (API REST возвращает токен).

В моем токене jwt у меня есть только идентификатор пользователя.Проблема в том, что, когда я хотел бы войти в систему с идентификатором пользователя = 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 голосов
/ 25 января 2019

Я думаю, что лучшим решением было бы создание промежуточного программного обеспечения, которое проверяет идентификатор отправителя и привязывает его к маршрутам, как показано ниже

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"})
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...