jwt.verify не выдает ошибку для истекших токенов - PullRequest
1 голос
/ 06 августа 2020

Я использую JWT - jsonwebtokens в Nodejs.

Я создаю токен и хочу выдать ошибку, если срок действия токена истечет. Мой токен успешно создан, и я проверяю срок действия токена в промежуточном программном обеспечении Apis в Expressjs. Затем токен отправляется из Angular в заголовках, а срок действия проверяется в промежуточном программном обеспечении.

Вот как я создаю токен:

var token = jwt.sign({
                id: id,
                expiresIn: '2m'
            },
                'mysecretkey'
            );

Вот как выглядит мое промежуточное программное обеспечение :

var token = req.headers['authorization']
var idToken = token.split(' ')[1]
if(token) {
    jwt.verify(idToken, 'myscretkey', (err, decoded) => {
    if(err) {
         return res.status(400).send('Session expired')
    }
    next()    
    })    
}

Это то, что я получаю в decoded:

dec:  {
  id: 'an id',
  expiresIn: '2m',
  iat: 1596744770
}

В этом случае срок действия моего токена не истекает даже через 2 минуты.

Как я могу этого добиться?

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Если вы хотите работать с hours или minutes, используя expiresIn, вам нужно объявить его после вашего secret вот так

let token = jwt.sign(id,'mysecretkey',{ expiresIn: '1h'});

Подробнее об этом здесь

1 голос
/ 06 августа 2020

В коде вы добавили expiresIn как часть полезной нагрузки. Но здесь expiresIn не имеет значения, и вам нужно использовать стандартное exp требование для истечения срока:

jwt.sign({
  id: 'an id',
  exp: Math.floor(Date.now() / 1000) + (60 * 2),
  iat: Math.floor(Date.now())
}, 'secret')

в этом примере это 2 минуты. Вы также можете рассчитать: (60 * минут), (3600 * часов) или (86400 * дней) для минут, часов или дней.

expiresIn можно использовать в качестве опции для метода подписи, как показано в ответе Шивама Суда. Думаю, в этом причина вашего замешательства.

...