Skip to main content

Rampart Python Middleware

JWT verification middleware for Rampart IAM server. Supports FastAPI and Flask.

Installation

# Core (PyJWT + cryptography)
pip install rampart-python

# With FastAPI support
pip install rampart-python[fastapi]

# With Flask support
pip install rampart-python[flask]

FastAPI

Basic Authentication

from fastapi import Depends, FastAPI
from rampart import RampartClaims
from rampart.fastapi import rampart_auth

app = FastAPI()
auth = rampart_auth("https://auth.example.com")

@app.get("/me")
async def me(claims: RampartClaims = Depends(auth)):
    return {
        "user_id": claims.sub,
        "email": claims.email,
        "roles": claims.roles,
    }

Role-Based Access Control

from rampart.fastapi import rampart_auth, require_roles_from_claims

auth = rampart_auth("https://auth.example.com")
check_admin = require_roles_from_claims("admin")

@app.get("/admin/users")
async def list_users(claims: RampartClaims = Depends(auth)):
    check_admin(claims)  # Raises 403 if "admin" role is missing
    return {"users": ["..."]}

Flask

Basic Authentication

from flask import Flask, g
from rampart.flask import rampart_auth

app = Flask(__name__)

@app.route("/me")
@rampart_auth("https://auth.example.com")
def me():
    return {
        "user_id": g.auth.sub,
        "email": g.auth.email,
        "roles": g.auth.roles,
    }

Role-Based Access Control

from rampart.flask import rampart_auth, require_roles

@app.route("/admin/users")
@rampart_auth("https://auth.example.com")
@require_roles("admin")
def list_users():
    return {"users": ["..."]}

Direct Usage (No Framework)

from rampart import RampartAuth

auth = RampartAuth(issuer="https://auth.example.com")
claims = auth.verify_token(raw_jwt_string)

print(claims.sub)       # "user-123"
print(claims.email)     # "user@example.com"
print(claims.roles)     # ["admin", "user"]
print(claims.org_id)    # "org-456"

Claims

Verified tokens return a RampartClaims dataclass:

Field Type Description
sub str Subject (user ID)
iss str Issuer URL
iat int Issued-at timestamp
exp int Expiration timestamp
org_id `str None`
preferred_username `str None`
email `str None`
email_verified `bool None`
given_name `str None`
family_name `str None`
roles list[str] Assigned roles

Configuration Options

RampartAuth(
    issuer="https://auth.example.com",  # Required: Rampart server URL
    audience="my-api",                   # Optional: expected audience claim
    jwks_cache_ttl=300,                  # JWKS cache lifetime in seconds (default: 300)
    algorithms=["RS256"],                # Allowed JWT algorithms (default: ["RS256"])
)

Running Tests

pip install -e ".[dev]"
pytest tests/

Metadata

Release files for rampart-python 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rampart-python 0.1.0
File Size Uploaded
rampart_python-0.1.0.tar.gz 4.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rampart-python 0.1.0
File Interpreter ABI Platform
rampart_python-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 7.7 kB

Release files / rampart_python-0.1.0.tar.gz

Download URL rampart_python-0.1.0.tar.gz
Size 4.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4f96d55dcbe30eeb0fc538c688fa9d2e863862e27fc94754a7f7d8c95d5ff931
BLAKE2b-256 checksum
How to use checksums
d83cd72564440d9d6eec93f4e3342a769f3f6852fd67bd94eec860ed4e74ecaf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release files / rampart_python-0.1.0-py3-none-any.whl

Download URL rampart_python-0.1.0-py3-none-any.whl
Size 3.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4007895e07ac5c2d4eeec4d39de04529098d5fa718d9d062e0ed6797b58b60bf
BLAKE2b-256 checksum
How to use checksums
d1fa59d186b94b19288f6222c6939eec9509ca0a613c136cbd78d26f9104e295
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page