Skip to main content

Stop fighting auth in FastAPI: JWT access/refresh, DB-backed blacklist & rotation, cookie or Bearer modes.

Project description

CACL logo

CACL — Clear Authentication Control Library

Stop fighting authentication in FastAPI.
Controlled JWT auth with database-backed tokens, blacklist, and rotation.


What is CACL?

CACL is a production-grade authentication library for FastAPI.

It provides explicit, database-backed control over JWT authentication:

  • access & refresh tokens
  • forced token invalidation (blacklist)
  • refresh token rotation
  • cookie or Bearer header modes — switched by a single flag

No hidden state.
No opinionated framework behavior.
No surprises in production.

You own the database and transactions — CACL handles token mechanics.


Cookie or Bearer — without the headache

CACL supports both browser and API authentication flows:

  • Cookie-based auth for web applications
  • Bearer tokens via Authorization header for APIs and services

Switching between them requires changing a single configuration flag.

No duplicated logic.
No conditional dependencies in routes.
No separate auth implementations to maintain.


Why CACL exists

Most JWT libraries treat tokens as stateless forever.

That approach breaks down the moment you need:

  • real logout
  • forced session invalidation
  • compromised token handling
  • refresh token reuse protection

CACL treats tokens as controlled entities stored in your database.

This allows you to:

  • revoke tokens instantly
  • track token lifecycle
  • enforce refresh rotation
  • audit authentication behavior

This is how authentication works in real production systems.


Authentication philosophy

CACL follows a simple principle:

Authentication must be explicit, inspectable, and revocable.

Stateless JWTs optimize for simplicity, not for control.
CACL optimizes for operational clarity.

The library intentionally:

  • does not create database engines
  • does not manage transactions
  • does not hide side effects

Your application owns the session lifecycle.
CACL integrates into it — cleanly and predictably.


Core principles

  • Library, not framework — no imposed app structure
  • Database-backed — tokens are real records
  • Explicit ownership — you control commits and rollbacks
  • FastAPI-native — async, dependencies, SQLAlchemy 2.x

DB schema and integration contract

No FK to your users table

CACL does not define a foreign key from jwt_tokens.user_id to your users.id column.

This is intentional to avoid forcing your application models to use CACL's Base. You keep full control of your own schema and ORM hierarchy.

Token verification still loads the current user and rejects tokens if the user does not exist or is inactive — so the security guarantee is fully preserved at the application layer.

If your app hard-deletes users, delete their JWT tokens in your application layer or run a cleanup job — there is no DB-level cascade without the FK.

Alembic setup with separate Base classes

# alembic/env.py

from your_app.core.base import Base as AppBase   # your application's Base
from cacl.models.base import Base as CACLBase    # CACL's Base

# Import models so metadata is populated before autogenerate runs
from your_app.models.users import User           # noqa
from cacl.models.jwt_token import JWTToken       # noqa

# Pass both metadata objects — Alembic autogenerate sees all tables
target_metadata = [AppBase.metadata, CACLBase.metadata]

Installation

pip install cacl

Minimal mental model

Your application:

  • creates DB engine
  • manages transactions
  • verifies user credentials

CACL:

  • creates JWT tokens
  • verifies JWT tokens
  • blacklists tokens
  • enforces authentication rules

Documentation & demo


When should you use CACL?

Use CACL if you need:

  • real logout (not "just delete the cookie")
  • forced token invalidation
  • refresh token rotation without hacks
  • clear and auditable auth boundaries

If you want "just slap JWT and forget about it" — this library is intentionally not for you.

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

cacl-0.2.1.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

cacl-0.2.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file cacl-0.2.1.tar.gz.

File metadata

  • Download URL: cacl-0.2.1.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cacl-0.2.1.tar.gz
Algorithm Hash digest
SHA256 f24bf0b3a1dccb204e2b8b65c60179bc5ddd3055b4801536b7126ae462aec7bf
MD5 7d4bb07ae11fab6d8efb421a70746644
BLAKE2b-256 8467a27ee12a5be0d4afac0b212e77b099c4adbe23810fa0d6105a44a22b0199

See more details on using hashes here.

Provenance

The following attestation bundles were made for cacl-0.2.1.tar.gz:

Publisher: publish.yml on CACL-project/CACL

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cacl-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: cacl-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cacl-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a30b7cff160332440731a27bf776aeee2d701e95a81c18327089959437f4ab97
MD5 035d0e13904819eb7a7942c1dddda8bf
BLAKE2b-256 3584c963fb3baca71f5fcc20ec5d235153dc251619480dd4f09e29ace5f6199c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cacl-0.2.1-py3-none-any.whl:

Publisher: publish.yml on CACL-project/CACL

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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