Полезно ли сохранять refresh-токены на будущее?

Следует ли хранить refresh-токены, выданные пользователю, и сравнивать их с токеном, полученным от пользователя? Разумно ли это с точки зрения безопасности, учитывая, что токен может быть скорее украден, чем подделан?
  • 20 сентября 2023 г. 12:17
Ответы на вопрос 3
Сохранение refresh-токенов на будущее может быть полезным в некоторых случаях, но такой подход имеет свои риски и требует осторожности.

С точки зрения безопасности, сохранение и сравнение refresh-токенов может быть опасным, так как их утечка может привести к несанкционированному доступу к аккаунту пользователя. Если злоумышленник получит доступ к хранилищу токенов, он сможет продлить свою сессию даже после истечения их срока действия, что создаст дополнительный риск.

Вместо того чтобы сохранять и сравнивать refresh-токены, рекомендуется использовать надежные методы аутентификации и авторизации, такие как двухфакторная аутентификация (2FA), проверка на каждом запросе и ведение журнала активности сессии пользователей. Это поможет защитить аккаунты от несанкционированного доступа и повысит безопасность системы в целом.

Если вы всё же решите сохранять refresh-токены, обязательно применяйте надлежащие меры безопасности, такие как хранение токенов в зашифрованном виде, по возможности на отдельном сервере, с ограниченными правами доступа. Также регулярно проверяйте на безопасность хранилище токенов и мониторьте его активность, чтобы обнаружить любые подозрительные действия.
В случае использования JWT, необходимо иметь в виду, что они являются stateless (без сохранения состояния) и проверку их валидности можно провести без обращения к базе данных. Если требуется проверка в БД, то лучше использовать сессионные ключи. Это может быть полезным при работе с большим количеством запросов.
 

Для предотвращения повторного использования refresh-токенов, можно хранить информацию, позволяющую проверить, использовался ли токен ранее. При первом использовании можно установить пометку, а при попытке повторного использования заблокировать все refresh-токены пользователя. В таком случае, при следующем обновлении токена с любого клиента данного пользователя будет требоваться полная аутентификация. Вместо хранения всего токена, можно сохранить только идентификатор пользователя и идентификатор токена (uid).
Похожие вопросы