Implémenter l'authentification JWT dans Laravel avec jwt-auth

Dans le développement web moderne, l'authentification des utilisateurs est une composante essentielle des applications sécurisées. La bibliothèque jwt-auth fournit une solution robuste et efficace pour Laravel, basée sur les JSON Web Tokens (JWT). Cet article explique comment intégrer et configurer cet outil pour ajouter une authentification fiable à votre application.

Avantages principaux de jwt-auth

Conçu spécifiquement pour Laravel et Lumen, jwt-auth exploite les JWT pour une authentification sans état. Ses principaux atouts sont :

  • Architecture sans état : Aucune session n'est stockée côté serveur, ce qui réduit la charge.
  • Interopérabilité : Fonctionne efficacement entre différents domaines et services.
  • Adapté aux applications mobiles et SPA : Idéal pour les architectures découplées.
  • Extensible : Supporte plusieurs méthodes d'authentification et pilotes de stockage.

Procédure d'installation

L'installation s'effectue en quelques étapes simples via Composer.

1. Installation du paquet :

composer require tymon/jwt-auth

2. Publication de la configuration (commande Artisan) :

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

3. Génération de la clé secrète :

php artisan jwt:secret

Cette commande ajoute la clé JWT_SECRET à votre fichier .env.

Configuraton essentielle

Le fichier config/jwt.php centralise les paramètres importants :

  • Durée de vie du jeton (ttl) : Par défaut à 60 minutes.
  • Durée de vie du jeton de rafraîchissement (refresh_ttl) : Permet de renouveler le jeton sans reconnecter l'utilisateur.
  • Algorithme de chiffrement : Supporte HMAC SHA256, RSA, etc.

Implémentation du flux d'authentification

Créez d'abord un contrôleur dédié :

php artisan make:controller AuthJWTController

Implémentez la méthode de connexion :

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

public function authentifier(Request $requete)
{
    $identifiants = $requete->only('email', 'mot_de_passe');

    $jeton = Auth::guard('api')->attempt($identifiants);
    if (!$jeton) {
        return response()->json(['erreur' => 'Identifiants invalides'], 401);
    }

    return $this->repondreAvecJeton($jeton);
}

protected function repondreAvecJeton($jeton)
{
    return response()->json([
        'jeton_acces' => $jeton,
        'type_jeton' => 'bearer',
        'expire_dans' => Auth::guard('api')->factory()->getTTL() * 60
    ]);
}

Définissez les routes correspondantes dans routes/api.php :

Route::post('/connexion', [AuthJWTController::class, 'authentifier']);
Route::post('/rafraichir-jeton', [AuthJWTController::class, 'rafraichir']);
Route::middleware('auth:api')->get('/utilisateur', function (Request $requete) {
    return $requete->user();
});

Rafraîchissement des jetons

Pour éviter des déconnexions fréquentes, utilisez le mécanisme de rafraîchissement :

public function rafraichir()
{
    $nouveauJeton = Auth::guard('api')->refresh();
    return $this->repondreAvecJeton($nouveauJeton);
}

Vous pouvez également invalider l'ancien jeton explicitement :

$jetonRafraichi = Auth::guard('api')->refresh(true, true);

Ressources complémentaires

Le répertoire docs/ du projet contient la documentation officielle détaillant les gardes d'authentification et la gestion des exceptions. Des exemples de tests sont disponibles dans le dossier tests/.

Étiquettes: jwt-auth Laravel Authentification json-web-token API

Publié le 4 juillet à 18h46