токен JWT является автономным токеном. Это означает, что он живет сам по себе, пока не истечет срок его действия и не может быть отозван. Так что по определению он должен истечь. Потому что, когда он попадет в чужие руки, он даст доступ к вашим ресурсам, не имея возможности отозвать его. Так что да, вы должны быть обеспокоены этой реализацией.
Проблема здесь в том, что вы доверяете самому токену обновления, потому что это JWT. Вы должны доверять серверу. Не потому, что JWT нельзя доверять, а потому, что токен обновления не обязательно должен быть JWT.
Сохранение токенов обновления в памяти, включая срок действия. Вы можете удалить просроченные токены из памяти. Это означает, что только токены, которые существуют в памяти, могут использоваться для запроса нового токена доступа. И чтобы быть в безопасности, используйте только одноразовые токены обновления.
Поток будет примерно таким:
- пользователь входит в систему, получает токен доступа JWT (5 минут) и код токена обновления 1 (48 часов). Токен обновления 1 сохраняется на сервере.
- пять минут спустя: срок действия маркера доступа истекает
- запрашивается новый токен доступа с использованием токена обновления 1.
- пользователь получает новый токен доступа (5 минут) И код токена обновления 2 (48 часов). Токен 1 удален из памяти, а токен 2 добавлен в память.
- и это продолжается в течение нескольких часов.
- В течение двух дней пользователь не использует приложение
- 50 часов спустя: поскольку срок действия обоих токенов истек, пользователь должен снова войти в систему. Сброс потока.
При выходе удалить токен обновления из памяти. И если тем временем вы хотите отозвать доступ. Просто удалите токен обновления из памяти. В течение 5 минут пользователю необходимо снова войти в систему.