Zum Hauptinhalt springen

Was ist Passport

Laravel Passport ist das offizielle Paket, um eine Laravel-Anwendung als OAuth2-Autorisierungsserver zu betreiben. Es wird für die Integration mit Drittanbieter-Apps oder für APIs eingesetzt, die einen strengen OAuth2-Flow benötigen.

Passport vs. Sanctum

Wenn OAuth2 zwingend erforderlich ist, wählen Sie Passport. Für einfache API-Token-Authentifizierung oder SPA-/Mobile-Auth ist Sanctum die bessere Wahl.
AspektPassportSanctum
ZweckOAuth2-Server-ImplementierungEinfache API-Authentifizierung
Geeignet fürExterne App-Integration, OAuth2-StandardkonformitätEigene SPAs, mobile Apps, persönliche Tokens
KomplexitätHochGering

Installation

Ab Laravel 13 wird offiziell install:api --passport empfohlen.
php artisan install:api --passport
Für die manuelle Einführung in bestehende Projekte:
composer require laravel/passport
php artisan passport:install
Beim ersten Deployment möchten Sie eventuell nur die Schlüssel erzeugen.
php artisan passport:keys

Konfiguration

User-Modell

Fügen Sie im User-Modell das Trait HasApiTokens und das Interface OAuthenticatable hinzu.
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;
}

auth-Guard

Konfigurieren Sie in config/auth.php für den api-Guard den passport-Treiber.
'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Service-Provider-Konfiguration

In boot() des AppServiceProvider legen Sie Scopes und Token-Gültigkeit fest.
use Carbon\CarbonInterval;
use Laravel\Passport\Passport;

public function boot(): void
{
    Passport::tokensCan([
        'orders:read' => 'Bestellungen lesen',
        'orders:create' => 'Bestellungen anlegen',
    ]);

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

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

Client-Verwaltung

Client für Authorization Code Grant

php artisan passport:client
Diesen Client verwenden Sie für den Standard-OAuth2-Flow mit Zustimmungsdialog.

Client für Client Credentials Grant

php artisan passport:client --client
Für Machine-to-Machine-Endpunkte verwenden Sie die Middleware EnsureClientIsResourceOwner.
use Laravel\Passport\Http\Middleware\EnsureClientIsResourceOwner;

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

Token-Verwaltung

Scopes vergeben

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

Scopes prüfen

use Laravel\Passport\Http\Middleware\CheckToken;

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

Widerrufen

use Laravel\Passport\Passport;

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

API-Routen schützen

Fügen Sie zu APIs, die mit einem User-Access-Token geschützt werden sollen, auth:api hinzu.
Route::middleware('auth:api')->group(function () {
    Route::get('/user', fn (Request $request) => $request->user());
    Route::get('/orders', [OrderController::class, 'index']);
});
Für Routen mit Client Credentials Grant verwenden Sie nicht auth:api, sondern EnsureClientIsResourceOwner.

Personal Access Token

Geeignet, wenn Benutzer selbst API-Tokens ausstellen, ohne den vollständigen OAuth2-Flow zu durchlaufen.
php artisan passport:client --personal
$token = $request->user()->createToken('cli-token', ['orders:read'])->accessToken;
Wenn Personal Access Tokens Ihr Hauptanwendungsfall sind, empfiehlt auch die offizielle Laravel-Dokumentation, Sanctum in Betracht zu ziehen.
Zuletzt geändert am 13. Juli 2026