Retour au blog
Symfony 10/04/2026 3 min de lecture

API Platform : Sécuriser votre API avec JWT de A à Z (Guide complet)

Marre des sessions PHP qui ne fonctionnent pas sur vos applications mobiles ou vos SPAs ? Le JWT (JSON Web Token) est le standard absolu pour sécuriser une API moderne. Découvrez comment le mettre en place sur Symfony et API Platform en partant de zéro, sans oublier les bonnes pratiques de sécurité.

API Platform : Sécuriser votre API avec JWT de A à Z (Guide complet)

Dès qu'on commence à séparer son Frontend (React, Vue, Angular) de son Backend Symfony, la gestion de l'authentification change. On oublie les cookies de session classiques pour passer au Stateless. Et l'outil roi pour ça, c'est le JWT.

Dans ce tutoriel, on va configurer ensemble le bundle LexikJWTAuthenticationBundle pour qu'il travaille main dans la main avec API Platform.

1. Installation des dépendances

On commence par installer le nécessaire. On va avoir besoin du bundle de sécurité de base, d'API Platform et du bundle de gestion des tokens.

composer require api lexik/jwt-authentication-bundle

2. La cryptographie : Générer les clés

Le JWT fonctionne avec un système de clés asymétriques. Une clé privée signe le jeton, une clé publique le vérifie. Symfony simplifie cela avec une commande dédiée :

php bin/console lexik:jwt:generate-keypair

Astuce : Assurez-vous que le dossier config/jwt est bien créé et que les clés ne sont pas versionnées si vous êtes sur un serveur de prod !

3. L'Entité User et l'interface Security

Pour s'authentifier, il nous faut un utilisateur. Si vous n'en avez pas, utilisez le maker :

php bin/console make:user

Dans votre entité User.php, assurez-vous d'ajouter l'attribut #[ApiResource]. Pour des raisons de sécurité, je vous conseille de désactiver les opérations d'écriture publiques sur cette ressource.

4. Le cerveau : Configuration de security.yaml

C'est l'étape où beaucoup de développeurs se perdent. On va diviser notre pare-feu en deux : un pour le login (obtenir le token) et un pour l'API (vérifier le token).

# config/packages/security.yaml
firewalls:
    login:
        pattern: ^/api/login
        stateless: true
        json_login:
            check_path: /api/login_check
            success_handler: lexik_jwt_authentication.handler.authentication_success
            failure_handler: lexik_jwt_authentication.handler.authentication_failure

    api:
        pattern: ^/api
        stateless: true
        jwt: ~

N'oubliez pas d'ajouter la route correspondante dans votre fichier routes.yaml :

api_login_check:
    path: /api/login_check
    methods: ['POST']

5. Tester votre configuration

Pour vérifier que tout fonctionne, essayez de faire un POST sur /api/login_check avec vos credentials JSON. Vous devriez recevoir un magnifique token encodé.

Pour toutes les requêtes suivantes, il suffira d'ajouter ce header :

Authorization: Bearer VOTRE_TOKEN_ICI

Conclusion & Sources

Le JWT est puissant mais attention : il ne permet pas de "déconnecter" un utilisateur facilement côté serveur (puisque c'est stateless). Pour cela, il faudra regarder du côté des Refresh Tokens.

Sources fiables :

Partager

Faire circuler cet article

Si le sujet peut aider quelqu’un sur Symfony, PHP ou la reprise d’un existant, tu peux le partager directement.