Laravel Sanctum ist ein schlankes Authentifizierungspaket für SPAs (Single Page Applications), mobile Apps und einfache APIs. Ohne OAuth-Komplexität lassen sich pro Benutzer mehrere API-Tokens ausstellen und verwalten.Sanctum löst zwei Probleme:
Authentifizierungsmodus
Mechanismus
Typische Anwendung
API-Token-Authentifizierung
Header Authorization: Bearer <token>
Mobile Apps, Drittanbieter-Integrationen
SPA-Authentifizierung
Session-Cookie + CSRF-Schutz
Eigenes Frontend (Vue/React usw.)
Für ein eigenes SPA, das die API aufruft, verwenden Sie die SPA-Authentifizierung. Für mobile Apps oder Dritte, die die API nutzen, die API-Token-Authentifizierung. Sie können auch nur einen der beiden Modi verwenden.
Mit createToken() stellen Sie einen Token aus. Über die Eigenschaft plainTextToken erhalten Sie den Klartext-Token. Der Klartext-Token wird nicht in der Datenbank gespeichert – geben Sie ihn dem Benutzer unmittelbar nach der Erstellung zurück.
use Illuminate\Http\Request;Route::post('/tokens/create', function (Request $request) { $token = $request->user()->createToken($request->token_name); return ['token' => $token->plainTextToken];})->middleware('auth');
In der Datenbank wird der Token als SHA-256-Hash abgelegt.
Registrieren Sie Middleware-Aliase in bootstrap/app.php.
use Laravel\Sanctum\Http\Middleware\CheckAbilities;use Laravel\Sanctum\Http\Middleware\CheckForAnyAbility;->withMiddleware(function (Middleware $middleware): void { $middleware->alias([ 'abilities' => CheckAbilities::class, // alle Abilities 'ability' => CheckForAnyAbility::class, // mindestens eine Ability ]);})
Und binden Sie sie an Routen.
// Nur Tokens mit check-status UND place-ordersRoute::get('/orders', function () { // ...})->middleware(['auth:sanctum', 'abilities:check-status,place-orders']);// Tokens mit check-status ODER place-ordersRoute::get('/orders', function () { // ...})->middleware(['auth:sanctum', 'ability:check-status,place-orders']);
// Alle Tokens entfernen$user->tokens()->delete();// Den im aktuellen Request verwendeten Token entfernen$request->user()->currentAccessToken()->delete();// Bestimmten Token entfernen$user->tokens()->where('id', $tokenId)->delete();
Die SPA-Authentifizierung verwendet Session-Cookies und braucht keine Token-Ausstellung. Sie eignet sich, wenn Ihre eigene Frontend-Anwendung (Vue, React, Next.js …) die API aufruft.
Für die SPA-Authentifizierung müssen SPA und API dieselbe Top-Level-Domain haben (unterschiedliche Subdomains sind erlaubt). Zudem sollten Requests die Header Accept: application/json und Referer bzw. Origin enthalten.
Mit der Middleware auth:sanctum erhalten unauthentifizierte Requests 401 Unauthorized. Beide Modi (Token- und SPA-Auth) werden von dieser Middleware abgedeckt.