Skip to main content

A simple and lightweight Python package for handling JWT (JSON Web Token) operations with USSO (Unified Single Sign-On).

Project description

USSO-JWT

A secure and flexible JWT (JSON Web Token) implementation for Python, designed to work seamlessly with the USSO authentication system. This library provides a robust set of tools for creating, signing, verifying, and managing JWTs with support for multiple cryptographic algorithms.

Features

  • Multiple Algorithm Support:

    • HMAC (HS256, HS384, HS512)
    • RSA (RS256, RS384, RS512, PS256, PS384, PS512)
    • ECDSA (ES256, ES384, ES512)
    • EdDSA (Ed25519)
  • JWK Support: Full support for JSON Web Keys (JWK) format

  • PEM Support: Load keys from PEM-encoded files

  • Type Safety: Built with type hints for better IDE support and code safety

  • Comprehensive Testing: Thorough test coverage for all algorithms and features

Installation

Install using pip:

pip install usso-jwt

Quick Start

Creating and Signing a JWT

from usso_jwt import JWT

# Create a JWT with a payload
jwt = JWT(
    payload={
        "sub": "1234567890",
        "name": "John Doe",
        "iat": 1516239022
    }
)

# Sign with HMAC
token = jwt.sign(hmac_key, "HS256")

# Sign with RSA
token = jwt.sign(rsa_private_key, "RS256")

# Sign with ECDSA
token = jwt.sign(ecdsa_private_key, "ES256")

# Sign with EdDSA
token = jwt.sign(eddsa_private_key, "Ed25519")

Verifying a JWT

from usso_jwt import JWT

# Verify with HMAC
jwt = JWT.verify(token, hmac_key, "HS256")

# Verify with RSA
jwt = JWT.verify(token, rsa_public_key, "RS256")

# Verify with ECDSA
jwt = JWT.verify(token, ecdsa_public_key, "ES256")

# Verify with EdDSA
jwt = JWT.verify(token, eddsa_public_key, "Ed25519")

Working with JWKs

from usso_jwt import JWT

# Create a JWT with a JWK
jwt = JWT(payload={"sub": "1234567890"})

# Sign with a JWK
token = jwt.sign(jwk, "RS256")

# Verify with a JWK
jwt = JWT.verify(token, jwk, "RS256")

Supported Algorithms

HMAC (Symmetric)

  • HS256: HMAC with SHA-256
  • HS384: HMAC with SHA-384
  • HS512: HMAC with SHA-512

RSA (Asymmetric)

  • RS256: RSA with SHA-256
  • RS384: RSA with SHA-384
  • RS512: RSA with SHA-512
  • PS256: RSA-PSS with SHA-256
  • PS384: RSA-PSS with SHA-384
  • PS512: RSA-PSS with SHA-512

ECDSA (Asymmetric)

  • ES256: ECDSA with P-256 and SHA-256
  • ES384: ECDSA with P-384 and SHA-384
  • ES512: ECDSA with P-521 and SHA-512

EdDSA (Asymmetric)

  • EdDSA: Ed25519

Security Considerations

  • Always use strong keys appropriate for your chosen algorithm
  • For HMAC, use keys at least as long as the hash output (e.g., 32 bytes for HS256)
  • For RSA, use keys of at least 2048 bits
  • For ECDSA, use the recommended curves (P-256, P-384, P-521)
  • Store private keys securely and never expose them
  • Use appropriate key rotation policies

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

usso_jwt-0.1.11.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

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

usso_jwt-0.1.11-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file usso_jwt-0.1.11.tar.gz.

File metadata

  • Download URL: usso_jwt-0.1.11.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for usso_jwt-0.1.11.tar.gz
Algorithm Hash digest
SHA256 87519ef1c8bbfa712279543398db36726b367493127dcfa9c43bef0efc07876a
MD5 dfea885d441b09f3aa06a502a317f48a
BLAKE2b-256 3cca28756b76d2acf1b2be57876aed2dcb9e651c38a2af41f8573eb601a458dd

See more details on using hashes here.

File details

Details for the file usso_jwt-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: usso_jwt-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for usso_jwt-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 3f25d93e7e49ccfe45473f1db0ca0dd14abe5a3c00e7e657f9218539711cf096
MD5 3421a6ad5db7c0fedbf3c067442c0ffe
BLAKE2b-256 144016be21533d77f91cbf5d5e456143704d7b0a956869cf2858738f4134b6cd

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