Skip to main content

Une bibliothèque d'authentification JWT simple pour FastAPI.

Project description

Fast JWT

Fast JWT est une bibliothèque d'authentification JWT simple et légère pour FastAPI. Elle fournit des dépendances faciles à utiliser pour protéger vos routes et gérer les tokens d'accès et de rafraîchissement.

Fonctionnalités

  • Création de tokens d'accès et de rafraîchissement.
  • Dépendances FastAPI pour la protection des routes.
  • Décodage et validation automatiques des tokens.
  • Gestion de l'expiration des tokens.
  • Facile à intégrer et à utiliser.

Installation

pip install fast-jwt-auth
uv add install fast-jwt-auth

Utilisation de base

Voici un exemple simple de la façon d'utiliser Fast JWT dans une application FastAPI.

1. Initialisation

Tout d'abord, créez une instance de FastJWT avec votre clé secrète.

from fastapi import FastAPI, Depends, HTTPException
from fast_jwt import FastJWT
from datetime import timedelta

app = FastAPI()

# Initialisez FastJWT avec votre clé secrète
SECRET_KEY = "votre_cle_secrete_super_securisee"
ALGORITHM = "HS256" # optionel, par defaut "HS256"
fast_jwt = FastJWT(secret_key=SECRET_KEY, algorithm=ALGORITHM)

2. Création de Tokens

Vous pouvez générer des tokens d'accès et de rafraîchissement pour un utilisateur.

@app.post("/login")
def login(data: LoginDataSchema):
    
    # Vérifiez les informations d'identification de l'utilisateur
    # Vos logiques
    # Créez un token d'accès avec une expiration de 30 minutes
    access_token = fast_jwt.create_access_token(
        user_id=user_id, expires_delta=timedelta(minutes=30) # par defaut: 15 min
    )
    # Créez un token de rafraîchissement avec une expiration de 1 jour
    refresh_token = fast_jwt.create_refresh_token(
        user_id=user_id, expires_delta=timedelta(days=1) # par defaut: 3 jours
    )
    # astuce: stockez le refresh_token en httpOnly cooky et n'envoyer que l'access_token
    return {"access_token": access_token, "refresh_token": refresh_token}

3. Protection des Routes

Utilisez la dépendance auth_required ou get_current_user pour protéger vos routes. Seuls les utilisateurs avec un token d'accès valide pourront y accéder.

@app.get("/protected", dependencies=[Depends(fast_jwt.auth_required)])
def protected_route():
    return {"message": "Bonjour, utilisateur ! Vous avez accès à cette route."}

Si l'action est lié à un utilisateur :

@app.get("/user/me")
def protected_route(user_id: str = Depends(fast_jwt.get_current_user)):
    # Votre logique : exemple récupère les données de l'utilisateur dans la DB
    return {"message": f"Bonjour, utilisateur {user_id} ! Vous avez accès à cette route."}

4. Rafraîchissement de Token

Créez une route pour permettre aux utilisateurs de rafraîchir leurs tokens d'accès en utilisant un token de rafraîchissement.

@app.post("/refresh")
def refresh(new_tokens: dict = Depends(fast_jwt.refresh_token)):
    # astuce: stockez le refresh_token en httpOnly cooky et n'envoyer que l'access_token
    return new_tokens

5. Obtenir les informations de l'utilisateur

La dépendance get_current_user décode le token et retourne le sub (sujet), qui est généralement l'ID de l'utilisateur.

@app.get("/user/me")
def read_users_me(user_id: str = Depends(fast_jwt.get_current_user)):
    return {"user_id": user_id}

API de FastJWT

  • FastJWT(secret_key: str, algorithm: str = "HS256"): Initialise l'instance.
  • create_access_token(user_id: str | int, expires_delta: timedelta = None) -> str: Crée un token d'accès.
  • create_refresh_token(user_id: str | int, expires_delta: timedelta = None) -> str: Crée un token de rafraîchissement.
  • refresh_token(...): Dépendance pour rafraîchir un token.
  • auth_required(...): Dépendance pour exiger une authentification.
  • get_current_user(...): Dépendance qui retourne le sujet du token.
  • get_jwt_subject(...): Dépendance qui retourne le sujet du token.

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

fast_jwt_auth-0.1.2.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

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

fast_jwt_auth-0.1.2-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file fast_jwt_auth-0.1.2.tar.gz.

File metadata

  • Download URL: fast_jwt_auth-0.1.2.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for fast_jwt_auth-0.1.2.tar.gz
Algorithm Hash digest
SHA256 4a243a33ea62c3821036176991536e7c2c310e8622e9f6032aa5090b08789e4f
MD5 dddf8814dd29719e534c8a27a0131778
BLAKE2b-256 dd60b9bc13926ef7a243632b1ca03486b8ae1d1c15fea5e67c7b7ba79a7b1005

See more details on using hashes here.

File details

Details for the file fast_jwt_auth-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: fast_jwt_auth-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for fast_jwt_auth-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 eec93a528d1815618d35dce490e65d8a687a5037f1318ce1a15f20ea07105d31
MD5 071c2c6e441a3b2bd106ccab3242d3b3
BLAKE2b-256 927df4337077eeedfbeaed593943d1b43c5a41a3d362ed615ec46d8238bc5365

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