Skip to main content

JWT user provider for casbin-fastapi-decorator

Project description

casbin-fastapi-decorator-jwt

JWT user provider for casbin-fastapi-decorator.

Extracts and validates a JWT from the Bearer header and/or a cookie, returning the payload as the current user.

Installation

pip install casbin-fastapi-decorator-jwt

Or via the core package extra:

pip install "casbin-fastapi-decorator[jwt]"

Usage

from casbin_fastapi_decorator_jwt import JWTUserProvider

user_provider = JWTUserProvider(
    secret_key="your-secret",
    algorithm="HS256",             # default
    cookie_name="access_token",    # optional, enables reading from cookie
    user_model=UserSchema,         # optional, Pydantic model for payload validation
)

Pass it to PermissionGuard as the user_provider:

import casbin
from fastapi import FastAPI, HTTPException
from casbin_fastapi_decorator import PermissionGuard

async def get_enforcer() -> casbin.Enforcer:
    return casbin.Enforcer("model.conf", "policy.csv")

guard = PermissionGuard(
    user_provider=user_provider,
    enforcer_provider=get_enforcer,
    error_factory=lambda user, *rv: HTTPException(403, "Forbidden"),
)

app = FastAPI()

@app.get("/articles")
@guard.require_permission("articles", "read")
async def list_articles():
    return []

API

JWTUserProvider

JWTUserProvider(
    secret_key: str,
    algorithm: str = "HS256",
    cookie_name: str | None = None,
    user_model: type[BaseModel] | None = None,
)
Parameter Description
secret_key Secret used to verify the JWT signature
algorithm JWT algorithm (default: "HS256")
cookie_name If set, also reads the token from this cookie name
user_model Pydantic model — if provided, the payload is validated via model_validate()

When called as a FastAPI dependency, the provider reads the token from:

  1. Authorization: Bearer <token> header (always)
  2. Cookie <cookie_name> (if cookie_name is set)

Development

See the workspace README for setup instructions.

task jwt:lint    # ruff + bandit + ty
task jwt:test    # pytest

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

casbin_fastapi_decorator_jwt-0.1.3.tar.gz (2.8 kB view details)

Uploaded Source

Built Distribution

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

casbin_fastapi_decorator_jwt-0.1.3-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file casbin_fastapi_decorator_jwt-0.1.3.tar.gz.

File metadata

  • Download URL: casbin_fastapi_decorator_jwt-0.1.3.tar.gz
  • Upload date:
  • Size: 2.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for casbin_fastapi_decorator_jwt-0.1.3.tar.gz
Algorithm Hash digest
SHA256 05b13b123c9be972e17881e8dcc8d0f1296ca6eed3e38ab2cc847d6b78af4b5d
MD5 777c3b108db5ac2aeebf009cc3165fb1
BLAKE2b-256 79e56b3cfcf2f9b0ebd6e97db786a35ac8d72413af91e7ec9b237f58e75bda5d

See more details on using hashes here.

File details

Details for the file casbin_fastapi_decorator_jwt-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: casbin_fastapi_decorator_jwt-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for casbin_fastapi_decorator_jwt-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1605ca7972e6d7fb576f1bf43a8466b4b276359487230fa06826bcbf1ca6fc06
MD5 6f195cfd554298266f55f3f395d7ef7d
BLAKE2b-256 44932dd0215015c3511a663528128cf46e2905e98d910e22e8f7df19e0df04df

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