Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jwtifypy-0.2.0.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jwtifypy-0.2.0-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

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

Hashes for jwtifypy-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6460ec0a429c5d432f0a02e8567b20e66216978a5845a464fdb034b590323960
MD5 c4c1f734538112af1d660ad35fc124e0
BLAKE2b-256 4543367a05fd50d6e4af06ffb30781835eafdda03d74cae80992e470ce5e13c3

See more details on using hashes here.

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

Hashes for jwtifypy-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3dd8cd81d5f55bcdced1139b0d5f2e50ca38c372d7fdf28f4a2fc7fbcd8f8c8e
MD5 ffde37f7929617733697ba66122882b4
BLAKE2b-256 79de83974efdf65c22167291ccf453c343fcd10257b12b4e4d2ac4ad00aebae3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page