Passer au contenu principal

Qu’est-ce que Passport

Laravel Passport est le package officiel qui permet à une application Laravel de fonctionner comme un serveur d’autorisation OAuth2. Il est utilisé pour l’intégration d’applications tierces ou pour les API qui nécessitent un flux OAuth2 strict.

Passport vs Sanctum

Si OAuth2 est indispensable, choisissez Passport. Si vous cherchez simplement une authentification par token d’API ou pour une SPA / mobile, choisissez Sanctum.
AspectPassportSanctum
ObjectifImplémentation d’un serveur OAuth2Authentification API simple
Cas d’usageIntégration d’applis externes, conformité OAuth2SPA maison, mobile, tokens personnels
ComplexitéÉlevéeFaible

Installation

La recommandation officielle sous Laravel 13 est install:api --passport.
php artisan install:api --passport
Pour une installation manuelle dans un projet existant, ces commandes fonctionnent aussi.
composer require laravel/passport
php artisan passport:install
Lors du premier déploiement, il peut être utile de ne générer que les clés.
php artisan passport:keys

Configuration

Modèle User

Ajoutez le trait HasApiTokens et l’interface OAuthenticatable à votre modèle User.
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\Contracts\OAuthenticatable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable implements OAuthenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

Garde d’authentification

Dans config/auth.php, utilisez le driver passport pour la garde api.
'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Configuration du service provider

Dans la méthode boot() de AppServiceProvider, vous pouvez définir les portées et la durée de vie des tokens.
use Carbon\CarbonInterval;
use Laravel\Passport\Passport;

public function boot(): void
{
    Passport::tokensCan([
        'orders:read' => 'Consulter les commandes',
        'orders:create' => 'Créer des commandes',
    ]);

    Passport::defaultScopes(['orders:read']);

    Passport::tokensExpireIn(CarbonInterval::days(15));
    Passport::refreshTokensExpireIn(CarbonInterval::days(30));
    Passport::personalAccessTokensExpireIn(CarbonInterval::months(6));
}

Gestion des clients

Client pour l’authorization code grant

php artisan passport:client
Ce type de client s’utilise dans le flux OAuth2 standard avec écran de consentement utilisateur.

Client pour le client credentials grant

php artisan passport:client --client
Pour les endpoints de communication de machine à machine, utilisez le middleware EnsureClientIsResourceOwner.
use Laravel\Passport\Http\Middleware\EnsureClientIsResourceOwner;

Route::get('/orders', function () {
    // ...
})->middleware(EnsureClientIsResourceOwner::using('orders:read'));

Gestion des tokens

Attribution de portées

$accessToken = $user->createToken(
    'dashboard-token',
    ['orders:read', 'orders:create']
)->accessToken;

Vérification des portées

use Laravel\Passport\Http\Middleware\CheckToken;

Route::get('/orders', function () {
    // ...
})->middleware(['auth:api', CheckToken::using('orders:read')]);

Révocation

use Laravel\Passport\Passport;

$token = Passport::token()->find($tokenId);
$token?->revoke();

Protection des routes API

Pour protéger une API avec un access token d’utilisateur, ajoutez auth:api.
Route::middleware('auth:api')->group(function () {
    Route::get('/user', fn (Request $request) => $request->user());
    Route::get('/orders', [OrderController::class, 'index']);
});
Pour les routes utilisant le client credentials grant, utilisez EnsureClientIsResourceOwner et non auth:api.

Personal Access Token

Adapté aux cas où l’utilisateur émet lui-même son token d’API, sans passer par le flux OAuth2 complet.
php artisan passport:client --personal
$token = $request->user()->createToken('cli-token', ['orders:read'])->accessToken;
Si votre usage principal est le Personal Access Token, la documentation officielle Laravel recommande de considérer Sanctum.

Liens associés

Dernière modification le 13 juillet 2026