Wat is Sanctum
Laravel Sanctum is een lichtgewicht authenticatiepakket voor SPA’s (single-page applications), mobiele apps en eenvoudige API’s. Zonder kennis van complexe OAuth kun je per gebruiker meerdere API-tokens uitgeven en beheren. Sanctum lost twee problemen op.Roep je de API aan vanuit je eigen SPA, gebruik dan SPA-authenticatie. Gebruiken mobiele apps of derden je API, gebruik dan API-tokenauthenticatie. Je mag ook gerust maar één van beide gebruiken.
Sanctum of Passport?
Moet je als OAuth2-provider fungeren voor externe diensten, kies dan Passport; voor de meeste applicaties volstaat Sanctum.
Installatie en configuratie
Installatie
Sanctum wordt opgezet door simpelweg het Artisan-commandoinstall:api uit te voeren.
- Installeren van het pakket
laravel/sanctum - Publiceren van het migratiebestand voor de tabel
personal_access_tokens - Uitvoeren van de migraties
De HasApiTokens-trait toevoegen
Voeg de traitHasApiTokens toe aan je User-model.
$user->createToken() en $user->tokens gebruiken.
API-tokenauthenticatie
Tokenflow
Een token uitgeven
Met de methodecreateToken() geef je een token uit. Via de property plainTextToken haal je de tokenwaarde in platte tekst op. Het platte-teksttoken wordt niet in de database opgeslagen, dus je moet het direct na uitgifte aan de gebruiker teruggeven.
Scopes (abilities) instellen
Door abilities (scopes) aan een token toe te kennen, beperk je welke acties met dat token mogelijk zijn.Scopes controleren met middleware
Registreer de middleware-aliassen inbootstrap/app.php.
Geldigheidsduur van tokens
Standaard verlopen Sanctum-tokens niet. Met de optieexpiration in config/sanctum.php stel je een geldigheidsduur in minuten in.
Tokens intrekken
SPA-authenticatie
SPA-authenticatie gebruikt een sessiecookie, dus je hoeft geen tokens uit te geven of te beheren. Het is geschikt wanneer je de API aanroept vanuit je eigen frontend (Vue, React, Next.js e.d.).De Sanctum-middleware inschakelen
Schakel de middlewarestatefulApi() in via bootstrap/app.php.
First-party domeinen instellen
Stel het domein van je SPA in via de optiestateful in config/sanctum.php.
CORS configureren
Roep je de API aan vanaf een ander subdomein, dan is CORS-configuratie nodig.config/cors.php de optie supports_credentials in op true.
Authenticatieflow vanuit de SPA
1
Het CSRF-cookie ophalen
Roep vóór het inloggen het endpoint
/sanctum/csrf-cookie aan om de CSRF-bescherming te initialiseren.2
Het loginrequest versturen
Stuur een POST-request naar het
/login-endpoint.3
Geauthenticeerde requests versturen
Requests na het inloggen worden automatisch geauthenticeerd via het sessiecookie.
Geauthenticeerde routes beschermen
Pas de middlewareauth:sanctum toe op een route en niet-geauthenticeerde requests krijgen een 401 Unauthorized terug. Deze ene middleware handelt zowel API-token- als SPA-authenticatie af.
Praktijkvoorbeeld: login-API met tokenuitgifte
Een voorbeeld van API-tokenauthenticatie voor een mobiele app.1
Het login-endpoint maken
2
Geauthenticeerde routes maken
3
Requests versturen vanuit de client
Testen
Bij het testen van Sanctum gebruik jeSanctum::actingAs() om een gebruiker te authenticeren en de toe te kennen abilities op te geven.
- Pest
- PHPUnit
Samenvatting
Installatiestappen op een rij
Installatiestappen op een rij
HasApiTokens toe aan het User-model:Veelgebruikte API's op een rij
Veelgebruikte API's op een rij
Kiezen tussen API-tokenauthenticatie en SPA-authenticatie
Kiezen tussen API-tokenauthenticatie en SPA-authenticatie
- API-tokenauthenticatie: voor clients zonder sessie, zoals mobiele apps, derden en CLI-tools.
- SPA-authenticatie: voor een SPA op hetzelfde domein (of subdomein), zoals je eigen Vue/React/Next.js-frontend. Veiliger en zonder tokenbeheer.