Нужно ли дополнительно проверять передаваемый 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 невозможно путём изменения роли в нём и можно полагаться на данные клиента?