Cat

Библиотека itsdangerous

В этом посте я коротко расскажу о библиотеке itsdangerous и приведу пример её применения.

Tips & Tricks proDream 26 Август 2024 Просмотров: 92

В одном моём проекте на FastAPI используется подтверждение регистрации по электронной почте. Для создания ссылки подтверждения регистрации требуется создание токена. С этим нам поможет библиотека itsdangerous.

itsdangerous — это библиотека, созданная для обеспечения безопасности данных, передаваемых между системами в открытом виде. Она позволяет создавать криптографически защищённые подписи для данных, чтобы гарантировать их целостность и аутентичность.

Ссылка на репозиторий библиотеки: https://github.com/pallets/itsdangerous/

 

Установка библиотеки:

pip install itsdangerous

 

Пример создания токена:

token_serializer = URLSafeTimedSerializer(secret_key="!!!Супер_Секретный_Ключ!!!")
confirmation_token = token_serializer.dumps("Данные для шифрования, например Email пользователя")
print(confirmation_token)

>>> "ItCU0LDQvdC90YvQtSDQtNC70Y8g0YjQuNGE0YDQvtCy0LDQvdC40Y8sINC90LDQv9GA0LjQvNC10YAgRW1haWwg0L_QvtC70YzQt9C-0LLQsNGC0LXQu9GPIg.Zq50tA.njJks3T0A-gecYTcsJ8zh-VMLWs"

Создаём экземпляр класса URLSafeTimedSerializer. Данный класс создаёт токен, подходящий для передачи в URL-адресе, т.е. слагифированный и основан он на времени создания.
Затем методом .dumps создаём сам токен, передав внутрь данные для шифрования, например, email пользователя.

 

Пример валидации токена:

token = "ItCU0LDQvdC90YvQtSDQtNC70Y8g0YjQuNGE0YDQvtCy0LDQvdC40Y8sINC90LDQv9GA0LjQvNC10YAgRW1haWwg0L_QvtC70YzQt9C-0LLQsNGC0LXQu9GPIg.Zq50tA.njJks3T0A-gecYTcsJ8zh-VMLWs"
token_serializer = URLSafeTimedSerializer(secret_key="!!!Супер_Секретный_Ключ!!!")
try:
    data = token_serializer.loads(token, max_age=3600)
except BadSignature:  
    print("Токен просрочен или неверный!")
print(data)

>>> "Данные для шифрования, например Email пользователя"

 

Обратившись к ранее созданному экземпляру класса или создав новый, передаём полученный токен в метод .loads() для расшифровки. Также у метода есть ключевой аргумент max_age, позволяющий установить срок жизни токена в секундах, например, если с создания токена прошло больше часа (3600 секунд), то сработает исключение BadSignature.

Автор

    Нет комментариев

    Реклама