Нужно ли дополнительно проверять передаваемый jwt?

увидел подобную реализацию middleware который проверяет роль пользователя:

const jwt = require('jsonwebtoken')
const {secret} = require('../config')


module.exports = function (roles) {
    return function (req, res, next) {
        if (req.method === "OPTIONS") {
            next()
        }

        try {
            const token = req.headers.authorization.split(' ')[1]
            if (!token) {
                return res.status(403).json({message: "Пользователь не авторизован"})
            }
            const {roles: userRoles} = jwt.verify(token, secret)
            let hasRole = false
            userRoles.forEach(role => {
                if (roles.includes(role)) {
                    hasRole = true
                }
            })
            if (!hasRole) {
                return res.status(403).json({message: "У вас нет доступа"})
            }
            next();
        } catch (e) {
            console.log(e)
            return res.status(403).json({message: "Пользователь не авторизован"})
        }
    }
};

Насколько вообще это безопасный подход доверять лишь одному переданному jwt-токену? Не лучше ли было бы дополнительно обратиться в бд и проверить id юзера из токена на наличие роли в базе? Или подделать jwt невозможно путём изменения роли в нём и можно полагаться на данные клиента?


Ответы (0 шт):