Node.js express, запросить токен jwt - как правильно получить новый действующий токен, если срок его действия истек в запросе

При успешном входе в систему я сохраняю возвращенный токен JWT в сеансе. Затем в моем поисковом маршруте я обращаюсь к api с токеном jwt из сеанса и устанавливаю в заголовке следующим образом:

router.post('/search', (req, res) => {

    var getToken = req.session.APIToken;
    var auth = 'Bearer '+getToken;

    request.get({
        headers: {
            "authorization": auth
        },
        url: "localhost/abc/search?name=peter"
    }, (error, response, body) => {
        if(error) {
            return console.dir(error);
        }
        var jsonBody = JSON.parse(body);

        if(jsonBody.status === 200) {
          console.log('Request successful!');
        }
        if(jsonBody.success === false) {

          /// ??? BUT what if the JWT token is expired! How do I properly refresh or get a new valid jwt token here? ///    

          console.log('Token expired!');
        }
    });

});

НО что, если срок действия токена JWT истек! Как мне правильно обновить или получить здесь новый действующий токен jwt?

Я полагаю, с функцией обратного вызова с использованием электронной почты и пароля, сохраненных в сеансе? Но как мне это сделать или как лучше всего это сделать?

Изменить: у меня есть два приложения ... одно интерфейсное приложение ... и одно отдельное приложение API. Итак, при входе в систему ... я вхожу в систему через интерфейсное приложение, но получаю токен JWT из приложения API. Сеанс входа в систему из внешнего приложения составляет 360 секунд ... токен JWT действителен для 60-х ... поэтому, если токен JWT истек, когда пользователь выполняет поисковый запрос ... я хочу автоматически сгенерировать новый токен, который завершает запрос.


person Philipp M    schedule 12.08.2018    source источник
comment
вернуть 403 в интерфейс, а затем во фронтенд, всякий раз, когда получено 403, повторить попытку входа в систему с использованием сохраненных учетных данных или предложить пользователю войти в систему   -  person William Chong    schedule 12.08.2018
comment
Не могли бы вы также предоставить ему пример кода?   -  person Philipp M    schedule 12.08.2018
comment
... но это приводит к тому, что пользователь должен снова войти в систему ... а также поисковый запрос ... чтобы быть более точным ... Я хочу, чтобы это выполнялось автоматически, и пользователю не нужно было снова входить в систему.   -  person Philipp M    schedule 12.08.2018


Ответы (1)


Я думаю, вы пытаетесь реализовать auth0 с токеном JWT. Лучшая практика - всегда возвращать 2 токена при входе в систему:

  • access_token (с использованием JWT): преимущество JWT заключается в том, что серверу не нужно запрашивать обратно в базу данных для проверки и получения информации о пользователе, который вызывает API.

  • refresh_token: это полезно для пользователя, чтобы повторно создать токен, когда срок действия access_token истек.

В клиентском приложении вы всегда должны сохранять 2 токена. Перед вызовом любого API вы должны проверить, не истек ли срок действия JWT. Это легко сделать с помощью jwt.decode(). Информация с истекшим сроком действия обычно хранится в ключе exp или iat. Если срок его действия истек, вам необходимо вызвать API для регенерации токена перед вызовом фактического API.

Вы можете найти пример здесь: https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

Надеюсь это поможет.

person Dat Tran    schedule 13.08.2018