Как правильно осуществлять проверку и обновление токена refresh jwt?

Как правильно работать с записями JWT в таблице refresh_tokens?

1) Вопрос: Необходимо ли искать старую запись JWT пользователя при логировании или всегда создавать новую запись?

2) Вопрос: При завершении работы с access token, нужно ли создавать новый refresh token или перезаписывать текущий, изменяя значение exp? При проверке на актуальность текущего токена, мы ищем его по совпадению полей user_id и exp?

3) Вопрос: При выходе пользователя из аккаунта, следует ли удалить запись или как-то аннулировать ее, чтобы при следующем логировании создать новый refresh token?

4) Вопрос: Как поддерживать два refresh token'а для разных устройств или браузеров?
  • 8 ноября 2023 г. 15:27
Ответы на вопрос 2
1) При логировании пользователей обычно создается новая запись JWT в таблице refresh_tokens. Это позволяет ограничить доступ к аккаунту только одному пользователю одновременно, а также дает возможность управлять сессиями пользователя (например, разрешать одновременную авторизацию на нескольких устройствах или запрещать).

2) При завершении работы с access token нет необходимости создавать новый refresh token или изменять значение exp текущего токена. Refresh token используется только для получения нового access token. Проверка актуальности refresh token обычно осуществляется путем сравнения значения user_id с указанным в токене и проверки наличия токена в таблице refresh_tokens.

3) При выходе пользователя из аккаунта можно удалить соответствующую запись JWT из таблицы refresh_tokens. Также возможно аннулирование токена, например, путем записи времени аннулирования в поле exp и проверки этого значения при получении нового access token.

4) Для поддержки нескольких refresh token'ов для разных устройств или браузеров можно использовать дополнительное поле device_id или browser_id в таблице refresh_tokens. При создании нового refresh token'а можно генерировать уникальный идентификатор устройства или браузера и связывать его с токеном. При проверке актуальности refresh token'а можно использовать значение user_id и device_id или browser_id.
1. В Refresh токене содержится нужная информация, поэтому при его использовании выдается новый Access Token.
2. В подписанном Access Token невозможно изменить значение exp, поэтому необходимо получить новый токен.
3. Если выход происходит из Web-клиента, Access Token можно просто забыть. Однако, если у пользователя остался refresh token, он может получить новый Access Token. Если требуется, чтобы Access Token стал недействительным после выхода, можно добавить в Access Token и Refresh token поле RefId. Если RefId заблокирован, новый Access Token из Refresh будет недоступен.
4. Каждое соединение имеет свой Refresh token, поэтому невозможно получить одинаковые Refresh token для разных соединений.
Похожие вопросы