
Pendahuluan
Pernah nggak kepikiran, kenapa Laravel punya dua sistem autentikasi API yang kayaknya tumpang tindih padahal sama-sama buat ngamanin request? Jujur, dulu saya sering bingung pas harus milih antara Sanctum atau Passport di project awal. Awalnya saya pikir makin kompleks sistemnya bakal makin aman, ternyata itu jebakan. Kadang kita cuma butuh token ringan buat SPA atau aplikasi mobile, tapi malah pasang 'tank' buat ngelindungin 'sepeda'. Di sini saya mau share sudut pandang kenapa nggak semua project butuh OAuth2 yang berat.
Tips & Best Practices
Di banyak project, biasanya saya mulai dari menanyakan kebutuhan klien soal integrasi pihak ketiga: apakah mereka perlu sistem OAuth2 server yang bisa dipakai aplikasi lain? Kalau cuma buat internal SPA (Vue/React) atau mobile app buatan kita sendiri, Sanctum sudah lebih dari cukup.
Pengalaman saya pas maintenance aplikasi skala menengah, pakai Sanctum jauh lebih enteng di database dibanding Passport yang naruh banyak tabel buat ngurusin token, client, dan grant types yang kadang nggak kepakai semua.
Kalau nanti tiba-tiba aplikasi berkembang jadi platform besar yang bakal punya API untuk developer luar (Third-party developer), barulah saya migrasi ke Passport. Jangan terjebak 'over-engineering' di hari pertama.
Contoh Kode
Buat yang pakai Sanctum, biasanya saya pasang di User model kayak gini biar gampang generate token pas user login di mobile app:
// User.php
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable {
use HasApiTokens, Notifiable;
}Terus pas controller login:
$token = $user->createToken('nama-device')->plainTextToken;
return response()->json(['token' => $token]);Ini jauh lebih simpel dibanding harus nge-hit endpoint Oauth yang butuh client_id dan client_secret buat dapet token.
Variasi Implementasi
Sanctum itu unik karena dia punya dual-mode. Kalau kita taruh di SPA yang satu domain, dia bisa pakai EnsureFrontendRequestsAreStateful middleware, jadi dia pakai session-based auth tanpa perlu ribet kirim token di header. Ini life-saver banget buat developer yang males ngurusin token expiration di client-side. Sebaliknya, Passport murni OAuth2 yang memaksa kita buat selalu kirim token di header Authorization (Bearer). Jadi pilihannya cuma satu: mau 'set-and-forget' pakai session atau mau 'strict' pakai standard OAuth2?
Kesalahan Umum
- Memaksa pakai Passport padahal cuma buat autentikasi mobile app internal (boros resource).
- Lupa nambahin middleware
auth:sanctumdi route API, akhirnya data publik semua. - Nggak baca dokumentasi kalau Sanctum itu sebenarnya dibangun di atas sistem session Laravel, jadi bisa dipake buat web-based auth juga.
- Salah kaprah soal token lifetime; di Sanctum kita harus setting manual kalau mau expiry, sedangkan di Passport udah ada standarnya.
- Terlalu takut migrasi; padahal kalau nanti butuh scale ke OAuth, ganti dari Sanctum ke Passport di Laravel itu lumayan smooth asal arsitekturnya rapi.
Ringkasan
Kesimpulannya, nggak ada yang lebih baik di antara keduanya, yang ada cuma 'mana yang paling pas sama workload saat ini'. Sanctum itu pilihan jujur buat 90% kasus project saya, sementara Passport itu pilihan bijak kalau kita udah mikirin ekosistem API pihak ketiga. Intinya, jangan biarkan kompleksitas tool mendikte simplisitas solusi yang kita buat.
Komentar
Posting Komentar