Есть ли веская причина не хранить токены сброса пароля в хранилище значений ключа, таком как Redis?

Обычно я храню хешированные токены сброса пароля в базе данных, такой как MySQL.

В моем текущем приложении я использую JWT, чтобы уменьшить количество запросов к базе данных. Я также использую Redis для отслеживания действительных JWT, теперь мне интересно, почему я не должен просто сохранять токены сброса пароля в Redis и сопоставлять токен с идентификатором пользователя + отметкой времени (чтобы запретить старые токены).

Единственная причина, о которой я могу думать, это использование памяти.

Есть ли другая причина не делать этого?


person MADforFUNandHappy    schedule 07.12.2020    source источник


Ответы (1)


Вы бы ввели точку отказа, а именно Redis.

Если отслеживание действительных JWT — это способ проверить JWT на предмет отзыва, то, вероятно, у вас уже есть эта точка отказа. Что произойдет, если Redis недоступен? Вы должны либо запретить доступ (отсюда и точка отказа), либо принять любой проверенный JWT как действительный (не отозванный).

Если последнее верно, хранение токенов сброса в Redis просто сделает эту зависимость явной: если Redis не работает, вы не можете изменить пароль.

person Tasos P.    schedule 07.12.2020
comment
Если Redis недоступен, вы не можете пройти аутентификацию, и да, также будет невозможно сбросить пароли, но если я использую mysql, точкой отказа будет база данных, так как же использование базы данных отличается? - person MADforFUNandHappy; 07.12.2020
comment
Насколько я понимаю, токен сброса пароля сам по себе был JWT. Затем вы можете подписать сопоставление (с идентификатором пользователя), а также отметку времени (iat). Я ошибаюсь? - person Tasos P.; 07.12.2020
comment
В любом случае ваша БД сама по себе является точкой отказа. Redis станет новой точкой отказа. - person Tasos P.; 07.12.2020
comment
ах, хорошо, теперь я понял, но для решения этой проблемы я мог бы использовать базу данных в качестве запасного варианта? Токен сброса пароля не является JWT, это просто токен, который вы можете (только один раз) использовать для получения JWT (токен является параметром URL и частью ссылки сброса, отправленной пользователю по почте, и я не хочу, чтобы JWT в запрос на получение, который может быть зарегистрирован) - person MADforFUNandHappy; 07.12.2020
comment
Вы можете использовать базу данных. Поскольку этот поиск используется для сброса пароля, при нормальных обстоятельствах это не должно вызывать проблем с производительностью. - person Tasos P.; 07.12.2020