Laravel Passport pour PHP : guide complet du serveur OAuth2
1. Qu'est-ce que Laravel Passport et pourquoi l'utiliser ?
Laravel Passport est une implémentation complète d'un serveur OAuth2 pour le framework Laravel (PHP). Il fournit un ensemble d'outils prêts à l'emploi pour l'authentification d'API, permettant aux développeurs de sécuriser rapidement leurs API RESTful à l'aide de jetons d'accès (access tokens) et de jetons de rafraîchissement (refresh tokens) standard. Cette bibliothèque est construite sur la base du puissant package League OAuth2 Server, adapté à l'écosystème Laravel, incluant les migrations, les facades, les commandes Artisan et les modèles Eloquent.
L'objectif principal de Passport est de libérer le développeur de la nécessité d'écrire manuellement la logique complexe de génération, de vérification et de stockage des jetons. À la place, vous obtenez des routes prêtes pour l'émission de jetons (via les grant types), un middleware pour protéger vos routes, et des méthodes pratiques pour gérer les clients (applications) et les jetons. Passport est idéal pour créer des applications monopages (SPA), des applications mobiles et des clients serveur nécessitant un accès sécurisé à votre API.
Pourquoi utiliser Passport plutôt qu'une solution maison ? Premièrement, la sécurité : la bibliothèque implémente toutes les exigences de la spécification OAuth2, y compris la protection contre les attaques CSRF, la gestion correcte des scopes et PKCE (Proof Key for Code Exchange). Deuxièmement, la rapidité de développement : vous obtenez des migrations, des modèles et des contrôleurs prêts à l'emploi. Troisièmement, la flexibilité : Passport prend en charge tous les principaux grant types (authorization code, client credentials, password grant, personal access tokens) et peut être facilement étendu pour répondre à des besoins spécifiques.
2. Installation
L'installation de Laravel Passport se fait via Composer, le gestionnaire de packages standard pour PHP. Exécutez la commande suivante à la racine de votre projet Laravel :
composer require laravel/passport
Après l'installation du package, vous devez exécuter les migrations et publier la configuration. Passport utilise son propre système de migrations qui crée les tables pour stocker les clients, les jetons, les codes d'autorisation et les jetons personnels :
php artisan migrate
Ensuite, lancez la commande passport:install qui créera les clés de chiffrement et les clients pour les jetons personnels et le password grant :
php artisan passport:install
Après avoir exécuté la commande, vous verrez deux client_id et client_secret dans la console. Le premier est pour les jetons personnels (Personal Access Client), le second pour le password grant (Password Grant Client). Enregistrez-les dans le fichier .env :
PASSPORT_PERSONAL_ACCESS_CLIENT_ID=1
PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=votre-secret-ici
PASSPORT_PASSWORD_GRANT_CLIENT_ID=2
PASSPORT_PASSWORD_GRANT_CLIENT_SECRET=votre-secret-ici
Ajoutez ensuite le trait Laravel\Passport\HasApiTokens au modèle User (app/Models/User.php) :
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
}
Dans le fichier config/auth.php, modifiez le pilote d'authentification pour utiliser passport :
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Enfin, dans le fichier app/Providers/AuthServiceProvider.php, ajoutez l'appel à Passport::routes() dans la méthode boot() :
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}