Обновление токена JWT (скользящие сеансы) и выход
Я очень новичок в JWT и в итоге унаследовал кодовую базу, которая использует JWT. Сейчас есть некоторые очень фундаментальные проблемы, с которыми я сталкиваюсь, и я не нахожу никаких ответов. Этот вопрос не основан на коде, поэтому, пожалуйста, потерпите меня.
Допустим, мой токен JWT действителен в течение 4 часов. Вот мои требования / ограничения
Если пользователь работает в 3 часа 59 минут. их сеанс должен быть продлен на 2 часа, и от них не требуется повторный ввод учетных данных.
Клиентский Java-скрипт не должен каким-либо образом кэшировать учетные данные пользователя.
Можно обновить токен JWT новым... но вы не должны делать это при каждом запросе на сервере. Поэтому клиент должен быть умным, чтобы обновить токен JWT, когда придет время. Вы не должны пытаться выдавать новый токен на каждый запрос, который вы делаете к приложению, потому что мы окажемся в сценарии, где у нас есть 1000 активных токенов, сгенерированных в течение сеанса, и все они активны. это делает требование выхода из системы еще сложнее.
Как только пользователь нажимает кнопку выхода. токен JWT больше не должен использоваться. Хотя его время жизни все еще в силе.
Если выход происходит. Все выданные токены (как часть расширения сеанса) должны быть признаны недействительными. Не только последний.
Я начинаю читать о JWT, но кажется, что мои требования не могут быть выполнены с JWT. эти требования очень легко удовлетворить с помощью подхода с идентификатором сеанса. но я пока не хочу отказываться от JWT.
1 ответ
Продление жизни JWT
Вы можете выдать JWT со старым. Ваше клиентское приложение должно запросить новый JWT, когда он близок к истечению времени. Клиент знает время истечения, читая exp
претендовать и может вызвать службу обновления для получения нового токена. Если клиентское приложение закрыто, срок действия JWT истекает, и пользователю необходимо будет снова представить учетные данные.
Выйти
Рекомендуется дать токенам истечь, но вы можете использовать черный список для хранения JWT, которые все еще действительны, но не могут использоваться для аутентификации:
Когда пользователь нажимает кнопку выхода
После обновления билета близко ко времени истечения
Вам нужно будет добавить в JWT уникальный идентификатор jti
, Черный список будет содержать jti
а также exp
, После текущего времени> exp
запись может быть отброшена.