Skip to main content

A fastapi dependency used to decode jwt tokens generated by nextauth,

Project description

fastapi-nextauth-jwt

PyPI version PyPI Downloads License Contributors

This project provides a FastAPI dependency for decrypting and validating JWTs generated by Auth.js. It is designed to facilitate the integration of a FastAPI backend with Next.js and NextAuth/Auth.js on the frontend.

[!NOTE] Using Auth.js with frameworks other than Next.js may work but has not been tested

Features

  • JWT Decryption & Validation: Seamlessly decrypt and validate JWTs generated by Auth.js
  • CSRF Protection: Built-in Auth.js-compatible CSRF protection with configurable HTTP methods
  • Flexible Configuration: Extensive customization options for encryption algorithms, cookie names, and security settings
  • NextAuth.js v4 Compatibility: Includes a compatibility layer for NextAuth.js v4 through NextAuthJWTv4

Installation

pip install fastapi-nextauth-jwt

Basic Usage

from typing import Annotated
from fastapi import FastAPI, Depends
from fastapi_nextauth_jwt import NextAuthJWT

app = FastAPI()

JWT = NextAuthJWT(
    secret="y0uR_SuP3r_s3cr37_$3cr3t", # Leave this out to automatically read the AUTH_SECRET env var
)

@app.get("/")
async def return_jwt(jwt: Annotated[dict, Depends(JWT)]):
    return jwt

Configuration Options

Essential Settings

  • secret (str): The secret key used for JWT operations. Should match AUTH_SECRET in your Next.js app. Leave this out to automatically read the AUTH_SECRET environment variable.
    JWT = NextAuthJWT(secret=os.getenv("YOUR_SECRET_ENV_VAR_NAME")))
    

Additional Options

If your auth.js settings are left at their defaults, you shouldn't need to touch these.

Security Options

  • csrf_prevention_enabled (bool): Enable CSRF protection

    • Defaults to False in development (ENV=dev), True otherwise
  • csrf_methods (Set[str]): HTTP methods requiring CSRF protection

    • Default: {'POST', 'PUT', 'PATCH', 'DELETE'}

Cookie Configuration

  • secure_cookie (bool): Enable secure cookie attributes

    • Default: True (when AUTH_URL starts with https)
  • cookie_name (str): Session token cookie name

    • Default: "__Secure-authjs.session-token" (when secure_cookie is True)
    • Default: "authjs.session-token" (when secure_cookie is False)
  • csrf_cookie_name (str): CSRF token cookie name

    • Default: "__Host-authjs.csrf-token" (when secure_cookie is True)
    • Default: "authjs.csrf-token" (when secure_cookie is False)

[!TIP] If you're using the latest version of Auth.js, here's the recommended configuration:

JWT = NextAuthJWT(
    secret=os.environ["AUTH_SECRET"],
)

Advanced Options

  • encryption_algorithm (str): JWT encryption algorithm

    • Supported: "A256CBC-HS512" (default), "A256GCM"
  • check_expiry (bool): Enable JWT expiration validation

    • Default: True

NextAuth.js v4 Compatibility

For NextAuth.js v4 applications, use the NextAuthJWTv4 class:

from fastapi_nextauth_jwt import NextAuthJWTv4

JWT = NextAuthJWTv4(
    secret=os.getenv("AUTH_SECRET")
)

This provides compatibility with the v4 token format and default settings

Best Practices

  1. Environment Variables: Always use environment variables for sensitive values:

    JWT = NextAuthJWT(
        secret=os.getenv("AUTH_SECRET"),
    )
    
  2. HTTPS in Production: Ensure AUTH_URL starts with https:// in production to enable secure cookies

  3. CSRF Protection: Keep CSRF protection enabled in production environments

Examples

A simple example is available in the examples folder. It demonstrates:

  • Using Next.js URL rewrites to route requests to FastAPI
  • Basic JWT validation setup
  • CSRF protection configuration

You can also place both the backend and frontend behind a reverse proxy like nginx, as long as the auth.js cookies reach FastAPI.

Environment Variables

  • AUTH_SECRET: The secret key used for JWT operations (required)
  • AUTH_URL: The URL of your application (affects secure cookie settings)
  • ENV: Set to "dev" to disable CSRF protection in development

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

fastapi_nextauth_jwt-2.1.1.tar.gz (69.8 kB view details)

Uploaded Source

Built Distribution

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

fastapi_nextauth_jwt-2.1.1-py2.py3-none-any.whl (8.7 kB view details)

Uploaded Python 2Python 3

File details

Details for the file fastapi_nextauth_jwt-2.1.1.tar.gz.

File metadata

  • Download URL: fastapi_nextauth_jwt-2.1.1.tar.gz
  • Upload date:
  • Size: 69.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fastapi_nextauth_jwt-2.1.1.tar.gz
Algorithm Hash digest
SHA256 97d24df96661c78a4c7003f78459cc6df36eccd77656a3067628cace34863754
MD5 169e26ee77e9621c16c51d26952891c8
BLAKE2b-256 b1e3f569b861a78c92c1ba1a8abb450db757feb2d1e0f499cc44a558492ce473

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastapi_nextauth_jwt-2.1.1.tar.gz:

Publisher: publish.yml on TCatshoek/fastapi-nextauth-jwt

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

File details

Details for the file fastapi_nextauth_jwt-2.1.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_nextauth_jwt-2.1.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2beb72fa7124e857c79204c4828ed50e783933f8a7c0bf51ac65f20806dc44df
MD5 847cc23504a3b1ac96cd20fd0e5fdc81
BLAKE2b-256 020f77402cfd8791af1bd7ff8fcadf8b56c13aa83253201a5e3157b13c6d0faa

See more details on using hashes here.

Provenance

The following attestation bundles were made for fastapi_nextauth_jwt-2.1.1-py2.py3-none-any.whl:

Publisher: publish.yml on TCatshoek/fastapi-nextauth-jwt

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