Chapter sebelumnya di section API Development sudah memetakan masalah autentikasi API secara konseptual: session milik browser, sedangkan client API seperti aplikasi mobile atau skrip server tidak memilikinya. Kita juga sempat membangun bearer token secara manual untuk merasakan mekanismenya dari nol. Sekarang kita berkenalan dengan paket resmi yang menyediakan mekanisme tersebut secara siap pakai: Laravel Sanctum. Chapter ini memetakan dua mode kerja Sanctum, kapan memakai mode token dan kapan memakai mode cookie, lalu membandingkannya dengan Passport supaya kita tidak salah pilih alat.
Apa Itu Sanctum #
Sanctum adalah paket autentikasi resmi Laravel yang menggambarkan dirinya sendiri sebagai featherweight authentication system — sistem autentikasi ringan untuk SPA dan API sederhana. Dalam sandbox course ini, Sanctum terinstal sebagai laravel/sanctum versi v4.3.3, dan begitu paket aktif, Sanctum langsung mendaftarkan dua hal ke aplikasi: guard bernama sanctum untuk middleware auth:sanctum, serta satu route bawaan GET /sanctum/csrf-cookie yang kita lihat nyata di php artisan route:list:
GET|HEAD sanctum/csrf-cookie sanctum.csrf-cookie › Laravel\Sanctum › CsrfC…Kekuatan Sanctum terletak pada kenyataan bahwa paket tersebut menampung dua mode autentikasi berbeda dalam satu paket kecil tanpa dependensi eksternal. Kita pilih mode-nya berdasarkan siapa client yang mengakses API. Tidak ada server OAuth, tidak ada token JWT bertanda tangan — hanya tabel database dan cookie session biasa.
Mode 1: Personal Access Token #
Mode pertama menjawab kebutuhan client yang menyimpan kredensial sendiri: aplikasi mobile, integrasi server-to-server, atau skrip CLI pihak ketiga. Alurnya sederhana: aplikasi memanggil $user->createToken('nama-token'), Laravel membuat string acak, menyimpan hash SHA-256-nya di tabel personal_access_tokens, lalu mengembalikan plaintext token kepada client tepat satu kali. Client kemudian mengirim token tersebut di setiap request lewat header Authorization: Bearer <token>.
Tabel personal_access_tokens menyimpan metadata lengkap tanpa pernah menyimpan nilai asli token: kolom name untuk label, token untuk hash, abilities untuk daftar hak akses, last_used_at untuk audit, dan expires_at untuk masa berlaku. Karena verifikasi token selalu berujung pada pencocokan hash di database, kita bisa mencabut token kapan saja — sesuatu yang tidak dimiliki JWT murni.
Mode 2: SPA Cookie Session #
Mode kedua ditujukan untuk frontend JavaScript yang kita kendalikan sendiri dan dilayani dari domain yang sama (atau subdomain yang berdekatan) dengan API. Alih-alih memaksa SPA menyimpan token di localStorage — wilayah yang rentan pencurian lewat skrip pihak ketiga — Sanctum mendaur ulang mekanisme session cookie yang sudah dikuasai Laravel. SPA tinggal memanggil /sanctum/csrf-cookie untuk mendapatkan cookie CSRF, login lewat route biasa, dan setelah itu cookie session otomatis mengautentikasi setiap request API.
Mode ini hanya berlaku untuk domain yang terdaftar di konfigurasi SANCTUM_STATEFUL_DOMAINS. Client dari domain lain tetap ditolak, sehingga cookie tidak bisa dipakai sembarangan oleh situs luar.
Kapan Memakai Sanctum, Kapan Passport #
Passport adalah paket resmi lain yang mengimplementasikan server OAuth 2.0 penuh: authorization code grant, client credentials, refresh token, dan sejenisnya. Pilihan antara keduanya bukan soal mana yang lebih canggih, melainkan siapa yang membutuhkan akses:
| Kondisi | Alat yang tepat | Alasannya | | | | | | Aplikasi mobile sendiri memakai API | Sanctum (token) | Cukup random token + hash, tanpa alur delegasi | | SPA first-party satu domain | Sanctum (cookie) | Session cookie sudah aman dan tersedia | | Skrip/kolaborator pihak ketiga butuh API key | Sanctum (token) | Pembuatan dan pencabutan token sederhana | | Memberi akses pihak ketiga atas nama user via alur otorisasi | Passport | Butuh standard OAuth 2.0 |
Aturan pragmatisnya: mulai dengan Sanctum, dan pindah ke Passport hanya ketika ada pihak ketiga yang benar-benar menuntut protokol OAuth 2.0. Mayoritas aplikasi tidak pernah sampai ke situ.
Dengan peta konsep ini di tangan, kita siap turun ke praktik: chapter berikutnya menginstal Sanctum langkah demi langkah, mempublikasi migrasinya, dan membedah isi config/sanctum.php yang menentukan perilaku kedua mode di atas. Dokumentasi resmi lengkapnya tersedia di dokumentasi Sanctum
.