Один из подходов заключается в использовании существующего токена в качестве токена обновления.
В вашем перехватчике или там, где вы проверяете, аутентифицирован ли пользователь, вы также можете проверить, находится ли токен рядомдо истечения срока действия.
Вы можете декодировать токен, чтобы найти дату и время его истечения. Вы можете продлить его, когда наступит X дней до истечения срока действия или когда вы захотите.
Помните, что вы можете декодировать токены JWT, не зная секретного ключа. Секретный ключ необходим для расшифровки токена, но не для декодирования . Вы можете использовать библиотеку, такую как jwt-decode , чтобы декодировать токен, или написать функцию, чтобы сделать это самостоятельно .
На сервере у вас должен быть APIконечная точка, которая принимает текущий токен JWT и, если он действителен, создает и возвращает новый токен с тем же содержимым.
Но безопасно ли его постоянно обновлять?
Как вы уже знаете, постоянно обновлять его небезопасно. Это связано с тем, что если злонамеренный объект имеет доступ к токену, он может обновить его, чтобы получить новый токен с расширенным сроком действия. Этот новый токен можно использовать для возобновления еще до истечения срока действия. Это может продолжаться до бесконечности, пока мы не определим эти токены и не остановим их обновление.
Несколько шагов, которые вы можете предпринять, чтобы сделать его несколько более безопасным:
- Отслеживайте количество обновлений для каждогопользователь на бэкэнде и прекратит обновление после достижения порога.
- Прекратите обновление токенов, выпущенных до X недель или определенного времени.
Таким образом, после некоторых обновлений или после определенного времени, пользовательдолжен снова пройти аутентификацию и получить новый токен.