Lightweight and extensible Python library for generating and verifying JWT tokens with multiple algorithms (HS256, ES256, RS256, etc.). Built on PyJWT, it provides an intuitive interface, flexible configuration, and secure key storage.
Project description
🔐 JWTifyPy
JWTifyPy — это легковесная и расширяемая Python-библиотека для генерации и проверки JWT-токенов с поддержкой различных алгоритмов (HS256, ES256, RS256 и др.).
Библиотека построена поверх PyJWT и предоставляет интуитивный интерфейс, удобную конфигурацию и безопасное хранилище ключей — всё, что нужно для работы с JWT.
📦 Установка
pip install jwtifypy
⚙️ Опциональные зависимости
Для работы с переменными окружения (.env) и криптографическими алгоритмами (ES256) используются дополнительные пакеты: python-dotenv и cryptography.
Они подключаются как опциональные зависимости и не устанавливаются по умолчанию.
Чтобы установить библиотеку с нужными дополнительными пакетами, используйте extras:
- С поддержкой переменных окружения (dotenv):
pip install jwtifypy[env]
- С поддержкой криптографии:
pip install jwtifypy[crypto]
- Полный набор дополнительных возможностей:
pip install jwtifypy[full]
🚀 Быстрый старт
🔧 Инициализация
from jwtifypy import JWTConfig
JWTConfig.init(config={
"keys": {
"algorithm": "HS256",
"secret": "env:MY_SECRET_ENV"
}
})
🔹 Базовые примеры
from jwtifypy import JWTManager
# 📥 Токен по умолчанию (используется ключ "default")
token = JWTManager.create_access_token("user123")
print(token)
# 👉 eyJhbGciOiJIUzI1NiIsInR5cCI6...
# 🔑 Токен с именованным ключом
admin_token = JWTManager.using("admin").create_access_token("admin42")
print(admin_token)
# 👉 eyJhbGciOiJSUzI1NiIsInR5cCI6...
📛 Добавление issuer (iss)
# 🧾 Токен с указанием issuer
token_with_issuer = (
JWTManager.using("admin")
.with_issuer("my-service")
.create_access_token("issuer-user")
)
print(token_with_issuer)
🎯 Добавление audience (aud)
# 🎯 Одиночная аудитория
token_with_aud = (
JWTManager.using("admin")
.with_audience("client-app")
.create_access_token("aud-user")
)
print(token_with_aud)
# 📦 Множественная аудитория (для проверки)
token_with_multiple_aud = (
JWTManager.using("admin")
.with_audience(
audience_for_encoding="web",
audience_for_decoding=["web", "mobile"]
)
.create_access_token("multi-aud-user")
)
print(token_with_multiple_aud)
🤖 Удобное переиспользование менеджера
# 🤖 Создание отдельного менеджера с выбранным ключом
JWTAdmin = JWTManager.using("admin")
# 🎯 Audience
token_with_aud = (
JWTAdmin
.with_audience("client-app")
.create_access_token("aud-user")
)
print(token_with_aud)
# 🔗 Issuer + Audience вместе
token_full = (
JWTAdmin
.with_issuer("auth-server")
.with_audience("bot")
.create_access_token("full-user")
)
print(token_full)
🔍 Верификация токена с iss и aud
payload = (
JWTManager.using("admin")
.with_issuer("auth-server")
.with_audience("bot")
.decode_token(token_full)
)
print(payload["sub"]) # 👉 full-user
print(payload["aud"]) # 👉 web
print(payload["iss"]) # 👉 auth-server
⚙️ Основные возможности
- ✅ Поддержка алгоритмов
HS256,ES256,RS256, и др. - 🔐 Хранилище ключей по именам (
default,admin,service-X…) - 📤 Простой интерфейс создания/декодирования JWT
- 🛠 Расширяемая архитектура для нестандартных сценариев
- ⏱ Поддержка стандартных claim'ов:
sub,exp,iat,aud, и др.
🧩 Кастомная конфигурация
from jwtifypy import JWTConfig
JWTConfig.init(config={
"keys": {
# 🔑 Симметричный ключ (HS256) — используется общий секрет
"default": {
"alg": "HS256",
"secret": "secret"
},
# 🔐 Асимметричный ключ (RS256) — RSA, ключи читаются из файлов
"admin": {
"algorithm": "RS256",
"private_key": "file:/path/to/private.pem",
"public_key": "file:/path/to/public.pem"
},
# 🧬 Асимметричный ключ (ES256) — ECDSA, приватный ключ из переменной окружения
# public_key будет автоматически сгенерирован, если установлена библиотека `cryptography`
"service": {
"alg": "ES256",
"private_key": "env:PRIVATE_KEY"
}
},
# ⏱ Leeway в секундах — допускаемая погрешность в проверке времени (exp, iat)
"leeway": 1.0,
# ⚙️ Дополнительные опции валидации (соответствуют PyJWT)
"options": {
"verify_sub": False, # Не проверять наличие claim "sub"
"strict_aud": False # Для мягкой проверки audience
}
})
🗂️ Структура проекта
jwtifypy/
├── __init__.py # Основной интерфейс библиотеки
├── manager.py # Класс JWTManager
├── config.py # Конфигурация и инициализация
├── key.py # Обработка ключей (HS/RS/ES)
├── store.py # Хранилище JWTKeyStore
├── exceptions.py # Кастомные исключения
└── utils.py # Вспомогательные утилиты
🧪 Тестирование
pytest tests/
🛡️ Рекомендации по безопасности
- ❗ Не храните секреты в коде. Используйте переменные окружения.
- 🔐 Используйте
RS256/ES256для межсервисной авторизации. - ⏳ Устанавливайте короткое время жизни токенов (
exp). - 🔎 Включайте и проверяйте claims, если безопасность важна (
iss,aud,sub).
📜 Лицензия
MIT © 2025 Created by [LordCode Projects] / [Dybfuo Projects]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jwtifypy-0.2.0.tar.gz.
File metadata
- Download URL: jwtifypy-0.2.0.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.11.13 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6460ec0a429c5d432f0a02e8567b20e66216978a5845a464fdb034b590323960
|
|
| MD5 |
c4c1f734538112af1d660ad35fc124e0
|
|
| BLAKE2b-256 |
4543367a05fd50d6e4af06ffb30781835eafdda03d74cae80992e470ce5e13c3
|
File details
Details for the file jwtifypy-0.2.0-py3-none-any.whl.
File metadata
- Download URL: jwtifypy-0.2.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.11.13 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dd8cd81d5f55bcdced1139b0d5f2e50ca38c372d7fdf28f4a2fc7fbcd8f8c8e
|
|
| MD5 |
ffde37f7929617733697ba66122882b4
|
|
| BLAKE2b-256 |
79de83974efdf65c22167291ccf453c343fcd10257b12b4e4d2ac4ad00aebae3
|