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
- L'utilisateur envoie login/password.
- Le serveur vérifie et renvoie un Token (une longue chaîne cryptée) :
eyJhbGciOiJIUzI1NiIsInR5c.... - À CHAQUE requête suivante, le client doit renvoyer ce token dans le header
Authorization: Bearer <token>. - 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.