Skip to main content

A plug-and-play client for integrating universal single sign-on (SSO) with Python frameworks, enabling secure and seamless authentication across microservices.

Project description

🛡️ USSO Python Client SDK

The USSO Python Client SDK (usso) provides a universal, secure JWT authentication layer for Python microservices and web frameworks.
It’s designed to integrate seamlessly with the USSO Identity Platform — or any standards-compliant token issuer.


🔗 Relationship to the USSO Platform

This SDK is the official verification client for the USSO identity service, which provides multi-tenant authentication, RBAC, token flows, and more.
You can use the SDK with:

  • Self-hosted USSO via Docker
  • Any identity provider that issues signed JWTs (with proper config)

✨ Features

  • Token verification for EdDSA, RS256, HS256, and more
  • Claim validation (exp, nbf, aud, iss)
  • Remote JWK support for key rotation
  • Typed payload parsing via UserData (Pydantic)
  • Token extraction from:
    • Authorization header
    • Cookies
    • Custom headers
  • FastAPI integration with dependency injection
  • Django middleware for request-based user resolution
  • 🧪 90% tested with pytest and tox

📦 Installation

pip install usso

With framework extras:

pip install "usso[fastapi]"     # for FastAPI integration
pip install "usso[django]"      # for Django integration

🚀 Quick Start (FastAPI)

from usso.fastapi.integration import get_authenticator
from usso.schemas import JWTConfig, JWTHeaderConfig, UserData
from usso.jwt.enums import Algorithm

config = JWTConfig(
    key="your-ed25519-public-key",
    issuer="https://sso.example.com",
    audience="api.example.com",
    type=Algorithm.EdDSA,
    header=JWTHeaderConfig(type="Authorization")
)

authenticator = get_authenticator(config)

@app.get("/me")
def get_me(user: UserData = Depends(authenticator)):
    return {"user_id": user.sub, "roles": user.roles}

🧱 Project Structure

src/usso/
├── fastapi/            # FastAPI adapter
├── django/             # Django middleware
├── jwt/                # Core JWT logic and algorithms
├── session/            # Stateless session support
├── models/             # JWTConfig, UserData, etc.
├── exceptions/         # Shared exceptions
├── authenticator.py    # High-level API (token + user resolution)

🐳 Integrate with USSO (Docker)

Run your own identity provider:

docker run -p 8000:8000 ghcr.io/ussoio/usso:latest

Then configure your app to verify tokens issued by this service, using its public JWKS endpoint:

JWTConfig(
    jwks_url="http://localhost:8000/.well-known/jwks.json",
    ...
)

🧪 Testing

pytest
tox

🤝 Contributing

We welcome contributions!


📝 License

MIT License © [mahdikiani]

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

usso-0.29.14.tar.gz (34.0 kB view details)

Uploaded Source

Built Distribution

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

usso-0.29.14-py3-none-any.whl (36.1 kB view details)

Uploaded Python 3

File details

Details for the file usso-0.29.14.tar.gz.

File metadata

  • Download URL: usso-0.29.14.tar.gz
  • Upload date:
  • Size: 34.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for usso-0.29.14.tar.gz
Algorithm Hash digest
SHA256 78492bdcb36395e4a37f844cbaa73b6bfb66e12850d851b8dd940911f9ff5876
MD5 08b8fff93a1d35b6ac25c1778fdebdf9
BLAKE2b-256 e5a9e90dbe594539f734401ac425bc66de1a1f6121322256d2466b61fd22302f

See more details on using hashes here.

File details

Details for the file usso-0.29.14-py3-none-any.whl.

File metadata

  • Download URL: usso-0.29.14-py3-none-any.whl
  • Upload date:
  • Size: 36.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for usso-0.29.14-py3-none-any.whl
Algorithm Hash digest
SHA256 c49aaa85ed3299dcf0232d5d811bfb26137637a2c71ea9d52279737036a864f2
MD5 1b2c175800c1a8d13cadfb1c1c752098
BLAKE2b-256 23cb6fcb15c49ca317e3199c46bf623763514fb78243c80d3e7ca3ae7bed57c1

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