JWT nodejs / express — Недопустимая подпись

#node.js #angular #express #jwt

#node.js #угловой #экспресс #jwt

Вопрос:

У меня возникли проблемы с Jwt и особенно ошибка «Недопустимая подпись».

Я генерирую токен после входа пользователя в систему (jsonwebtoken).

 userSchema.methods.generateJwt = function() {
  var expiry = new Date();
  //expiry.setDate(expiry.getDate()   7);

  expiry.setDate(expiry.getDate()   2);
  return jwt.sign({
    _id: this._id,
    username: this.username,
    name: this.lastname,
    exp: parseInt(expiry.getTime() / 1000),
  }, process.env.SRCT,  {
    algorithm: 'HS256'
  });
}
  

Затем я создаю промежуточное программное обеспечение express-jwt, чтобы добавить его в маршруты :

 var auth = jwt({
  secret: process.env.SRCT,
  userProperty: 'payload'
});
  

Используется следующим образом :

 router.get('/', auth, ctrlUser.slash);
  

Созданный мной JWT передается в интерфейсном запросе (на предъявителя авторизации) и совпадает с тем, который был создан сразу после входа в систему, в соответствии с отладчиком.

Но, к сожалению, у меня все еще возникает ошибка {«message»: «UnauthorizedError: invalid signature»} после каждого запроса к серверной части nodejs.

Может кто-нибудь сказать мне, что я делаю не так, чтобы иметь недопустимую подпись?

Заранее спасибо

Ответ №1:

Где ваша функция проверки? Вам нужно проверять при каждом запросе, отправленном в защищенную область, действительно ли токен действителен, jwt предоставляет функцию verify для этого.

Ответ №2:

Похоже, вы не анализируете заголовки запроса для токена и не используете verify() функцию библиотеки JWT для этого. ваше промежуточное программное обеспечение аутентификации должно выглядеть примерно так

 module.exports = (req, res, next) => {
    try {
        //parse the token from Authorization header (value of "bearer <token>")
        let token = req.headers.authorization.split(" ")[1];

        //verify the token against your secret key to parse the payload
        const tokenData = jwt.verify(token, process.env.JWT_SECRET_KEY);

        //add the data to the request body if you wish
        req.user = tokenData;
        next();
    } catch (err) {
        res.status(401).json({
            message: "Unauthorized access error!",
        });
    }
};