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.
| Aspekt | Passport | Sanctum |
|---|
| Zweck | OAuth2-Server-Implementierung | Einfache API-Authentifizierung |
| Geeignet für | Externe App-Integration, OAuth2-Standardkonformität | Eigene SPAs, mobile Apps, persönliche Tokens |
| Komplexität | Hoch | Gering |
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.
Weiterführende Links
Zuletzt geändert am 13. Juli 2026