JWT: передача нового токена клиенту в течение одной минуты или менее от истечения срока действия.Плохая идея или хорошая? - PullRequest
0 голосов
/ 01 марта 2019

В моем бэкэнде я проверяю, сколько времени осталось до истечения JWT (15 минут).Если это одна минута или меньше, я создаю новый и присоединяю его к ответу в заголовке setToken.Фронт будет хранить и использовать новый.Это хороший подход?Мнения по вопросам?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

С моей точки зрения, это не очень хорошая идея.Проблема не в безопасности, а скорее в логичности.

Вы смешиваете доступ к ресурсам с выдачей токенов.Если клиенту нужен токен, он должен явно запросить новый и связаться с выделенной конечной точкой.Если срок действия токена истек, вашему серверу может потребоваться дополнительная информация (обновить токен, проверить учетные материалы ...).

С вашим потоком клиент получит токен, который он не запрашивал.Кроме того, в дополнение к логике вашего приложения ваш клиент должен проверять наличие нового токена для каждого отдельного запроса.Он может пропустить новые токены доступа и потерять права доступа, если срок действия старого истек.

Наконец, но не в последнюю очередь, этот новый токен может быть бесполезным и никогда не использоваться клиентом.

0 голосов
/ 01 марта 2019

Твоя идея хороша.Вы реализуете алгоритм обновления токена.Зависит от вариантов использования, но может быть лучше возвращать новый свежий токен чаще, а не только тогда, когда срок действия токена истекает в следующую минуту.

Например, общий подход состоит в том, чтобы вернутьсвежий токен с распределением вероятностей (например, каждый запрос имеет вероятность 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 для обмена данными между серверами.

На мой взгляд, второй подход предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...