Продолжайте обновлять JsonWebToken любым пользователем формы действия

Я использую JsonWebtoken для создания токена доступа для аутентификации в моем веб-приложении в узле js с помощью экспресс.

Я хочу определить дату истечения срока действия этого токена, но не знаю, как он обновляет "iat", выполняя некоторые действия пользователя! в основном, я хочу, чтобы дата истечения срока действия начиналась снова, если пользователь выполняет какое-либо действие в течение 30 минут с момента последнего действия!

jwt.sign({ _userName: userName, _name: name + ' ' + sureName, _role: role.name }, config.get('jwtPrivateKey'),);

Вот как я создаю токен. Итак, вопрос в том, как я могу обновить токен и отправить новый в случае активности пользователя в течение 30 минут, чтобы мы могли убедиться, что пользователю не нужно входить в систему через 30 минут, и токен будет действительным.?! а затем я хочу, чтобы токен истек, если пользователь не выполняет никаких задач более 30 минут!

2 ответа

Стандартный способ обновить токен доступа - создать отдельный токен, "токен обновления" (буквально). Вот сообщение в блоге, чтобы вы начали, сообщение в блоге.

Основная идея - отправить оба токена клиенту. Срок действия токена доступа истекает через X времени, а токен обновления истекает через гораздо более длительный промежуток времени. Как только клиент получает сообщение об ошибке от сервера (не прошедший проверку подлинности), он отправляет на сервер еще один запрос, запрашивая новый токен доступа. При выполнении этого запроса он передает токен обновления. Сервер проверяет, действителен ли токен обновления, и если да, он вернет клиенту новую пару токенов обновления / доступа. Важно, чтобы токен обновления можно было использовать только для получения новых токенов доступа, а токен доступа использовался для получения данных с сервера.

Я исправляю это с помощью этого, чтобы я мог сгенерировать новый, если он мне понадобится

app.use(function (message, req, res, next) {
    try {
        if (typeof message === 'string') {
            let userName = req.body._userName;
            let name = req.body._name;
            let role = req.body._role;
            let token = generateToken(userName, name, role);
            res.header('z-auth-token', token).status(200).send(message);
        } else {
            next(message);
        }
    } catch (e) {
        next(e);
    }
    
});
Другие вопросы по тегам