Aller au contenu principal

3 formations sont désormais disponibles : Python, Flask et JS.

Aller au contenu principal

Authentification API (JWT)

Apprendre Flask : Le Guide Ultime
3 min de lecture
Gratuit

Pour une API, les cookies de session (qu'on a vus avant) ne sont pas idéaux (surtout si ton frontend est sur un autre domaine, ou si c'est une app mobile).

Le standard, c'est le JWT (JSON Web Token).

Le principe

  1. L'utilisateur envoie login/password.
  2. Le serveur vérifie et renvoie un Token (une longue chaîne cryptée) : eyJhbGciOiJIUzI1NiIsInR5c....
  3. À CHAQUE requête suivante, le client doit renvoyer ce token dans le header Authorization: Bearer <token>.
  4. Le serveur déchiffre le token. S'il est valide, il sait qui c'est. Pas besoin de base de données pour vérifier la session !

Installation

pip install flask-jwt-extended

Implémentation

from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity

app.config["JWT_SECRET_KEY"] = "super-secret" 
jwt = JWTManager(app)

# Login pour avoir le token
@app.route("/api/login", methods=["POST"])
def login():
    username = request.json.get("username", None)
    password = request.json.get("password", None)
    
    # (Vérifier le password en vrai ici avec check_password_hash)
    if username != "admin" or password != "admin":
        return jsonify({"msg": "Bad username or password"}), 401

    # Créer le token
    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token)

# Route protégée
@app.route("/api/protege", methods=["GET"])
@jwt_required() # <-- Bloque si pas de token valide
def protected():
    current_user = get_jwt_identity() # Récupère l'info cachée dans le token
    return jsonify(logged_in_as=current_user)

C'est le standard de l'industrie pour sécuriser les API modernes.