Библиотека itsdangerous
В этом посте я коротко расскажу о библиотеке itsdangerous и приведу пример её применения.
Реклама
В одном моём проекте на 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
.
Все статьи