Задать вопрос
@Mikkkch

Есть ли смысл проверять наличие пользователя в базе когда снаружи неизвестен секретный ключ?

Здравствуйте, я реализовал систему аутентификации посредствам кукисов. При входе для пользователя генерируется токен и кладется с ключом на хранение. Когда пользователь заходит на страницу, которая должна запрещать вход пользователям, еще не вошедшим в систему, нужно редиректнуть или совершить какие-либо другие действия.
Вот как выглядит код:
authorization = False
cookie_key = request.cookies.get(self.cookie_key)

try:
    jwt.decode(cookie_key, self.secret, self.algorithm)
    authorization = True
except jwt.exceptions.DecodeError:
    pass

return authorization

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

В коде многих других людей я видел следующую проверку:
payload = jwt.decode(cookie_key, self.secret, self.algorithm)
username = payload.get['sub']
user = db.get(username)
if not user:
     pass

Есть ли от нее смысл?
  • Вопрос задан
  • 61 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@OlegPyatakov
pyatakov.com
В этом есть смысл на случай:
  • Пользователь был удален из БД после генерации токена
  • Дальше в коде с объектов user будет работа
  • Взломали сервис генерации токена. Конечно, такая проверка мало поможет, но это может быть звоночком
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы