Твоя идея хороша.Вы реализуете алгоритм обновления токена.Зависит от вариантов использования, но может быть лучше возвращать новый свежий токен чаще, а не только тогда, когда срок действия токена истекает в следующую минуту.
Например, общий подход состоит в том, чтобы вернутьсвежий токен с распределением вероятностей (например, каждый запрос имеет вероятность 30% отослать свежий токен) в сочетании с алгоритмом синхронизации, подобным вашему.Итак, для каждого запроса:
if (30% of times true || token is expiring in next n seconds)
give a new refresh token.
Распределение вероятностей используется для ограничения использования процессора, необходимого для подписи.
Другой подход заключается в реализации API (скажем, GET /token
), которыйпросто проверит предоставленный JWT и, если он действителен, сгенерирует новый свежий JWT в качестве ответа.При таком подходе логика «когда обновлять» переносится на клиента.Клиент должен решить, когда вызывать API /token
, чтобы обновить свой токен.И обычно это делается при запуске веб-приложения / мобильного приложения.Или каждые n минут, если вы используете JWT для обмена данными между серверами.
На мой взгляд, второй подход предпочтительнее.