Как я могу предотвратить использование старого токена flask-jwt при смене пароля

Я новичок в использовании JWT и flask-jwt. Я реализовал flast-jwt в своем проекте. Токен доступа, полученный от flask-jwt, не истек даже после того, как я изменил пароль пользователя. Тогда как можно предотвратить использование старого токена flask-jwt.

3 ответа

Мы можем создать дополнительный уровень безопасности, храня все токены в нашей БД. При проверке токена мы можем проверить, генерируется ли этот ток самим нашим сервером или нет, используя эту таблицу базы данных. Также мы можем отозвать токен, когда пользователь сбросит свой пароль, просто удалив этот токен из БД.

Это является доводом в пользу использования маркеров JWT без сохранения состояния - вы не можете явно отозвать их.

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

Важно помнить, что токены JWT (без сохранения состояния) становятся недействительными ТОЛЬКО по истечении срока их действия или при изменении общего секрета, используемого для их подписания.

Итак, в основном, выбор:

  • Используйте базу данных, как предложил @ savad-kp, для хранения списка занесенных в черный список / отозванных токенов: это означает, что вам придется запрашивать ее каждый раз при проверке токена, что подрывает одно из основных преимуществ использования токенов JWT.
  • Положитесь на кратковременные токены доступа: это означает, что клиенты должны будут часто проходить повторную аутентификацию, что может быть опцией запрета, особенно для мобильных устройств и веб-приложений.
  • Используйте шаблон свежести токена или другой пользовательский вариант:

[...] вы можете пометить некоторые токены доступа как свежие, а другие как не свежие, и использовать декоратор fresh_jwt_required, чтобы только свежие токены могли получить доступ к некоторым конечным точкам.

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

Я бы также предложил использовать плагин flask-jwt-extended вместо плагина flask-jwt. Он поддерживает некоторые распространенные шаблоны из коробки (обновления токенов, свежесть токенов), а также черные списки и отзыв токенов с помощью db.

Другие вопросы по тегам