Как корректно использовать пару JWT и Refresh токенов?

Как правильно организовать работу с парой токенов JWT + Refresh?

Суть: нужно добиться эффекта, что если пользователь пользуется системой, токены обновляются и все хорошо. Если пользователь отошел на час (время жизни access token), при дальнейшем действии его нужно разлогинивать из системы.
На текущий момент бэкенд полностью реализован, выдача токена, обновление, отзыв токена и тд. остаются следующие вопросы:
1) Кто следит за токеном и обновляет пару? Бэкенд или Фронтенд?
2) Я предполагал что фронтенд перед каждым запросом будет проверять не истек ли срок жизни access token, и если истек - отправляет запрос на обновление токенов, получает их, приклеивает и дальше проходит запрос. Но как в таком случае, разлогинивать пользователя при отсутствии активности в течении 1 часа?

Дополнительно:

Я предполагал что фронтенд перед каждым запросом будет проверять не истек ли срок жизни access token, и если истек - отправляет запрос на обновление токенов, получает их, приклеивает и дальше проходит запрос. Но как в таком случае, разлогинивать пользователя при отсутствии активности в течении 1 часа?

Его не нужно разлогинивать, т.к. проверка токена не пройдет. В общем это будет примерно так выглядеть
1) фронт видит, что access токен истёк
2) Отправляет refresh на точку api
3) refresh api видит что refresh токен истёк и отправляет статус 401 например и фронт переводит пользователя на панель логина
4) пользователь вводит учётные данные снова

Время жизни access token ставите допустим 5 минут. Время жизни рефреша 1 час. Профит

Ответы:

Следить за сроком жизни может как клиент, так и сервер или оба.
В первом случае клиент, обнаружив просроченный токен доступа, сразу отправляет запрос на обновление. Недостаток - если на клиенте перевести часы назад, то он не обнаружит протухший токен.
Во втором случае время всегда берётся с одного источника (сервера), но будет лишний запрос, на который сервер ответит, что токен просрочен.

 

Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

 

    • Как корректно использовать пару JWT и Refresh токенов?Есть ответ
    • 07.04.2024
    Ответить

    Для корректного использования пары JWT и Refresh токенов в приложении необходимо следовать определенным шагам.

    1. Генерация JWT токена:
    JWT токен создается при успешной аутентификации пользователя и содержит информацию о пользователе и его правах. Для генерации токена можно использовать библиотеки, такие как `firebase/php-jwt` или `lcobucci/jwt`.

    ```php
    123,
    "username" => "john_doe"
    );

    $jwt = JWT::encode($payload, $secret_key);
    ```

    2. Отправка JWT токена клиенту:
    После генерации токена, он должен быть отправлен клиенту для сохранения. Обычно это делается путем добавления токена в заголовок `Authorization` или в тело ответа.

    ```php
    <?php
    header('Authorization: Bearer ' . $jwt);
    ```

    3. Проверка и обновление токена:
    При каждом запросе клиента необходимо проверять валидность JWT токена. Если токен истек или невалиден, то клиент должен использовать Refresh токен для получения нового JWT токена.

    ```php
    exp < time()) {
    // Generate new JWT token using Refresh token
    // Respond with new JWT token
    }
    ```

    4. Хранение Refresh токена:
    Refresh токен должен быть хранен в безопасном месте на сервере. Обычно он сохраняется в базе данных с привязкой к пользователю.

    ```php
    <?php
    // Save Refresh token in database
    $refresh_token = generate_refresh_token();
    save_refresh_token($user_id, $refresh_token);
    ```

    5. Обновление JWT токена:
    При использовании Refresh токена, необходимо генерировать новый JWT токен для клиента.

    ```php
    <?php
    $payload['user_id'] = $user_id;
    $new_jwt = JWT::encode($payload, $secret_key);
    ```

    Следуя этим шагам, вы сможете корректно использовать пару JWT и Refresh токенов в вашем приложении.

Оставить комментарий