Salah satu pertanyaan paling umum ketika membangun API dengan Laravel adalah: pakai Sanctum atau Passport? Keduanya adalah package resmi Laravel untuk autentikasi API, namun memiliki tujuan dan cara kerja yang berbeda. Memilih yang salah bisa membuat pengembangan jadi lebih rumit dari yang seharusnya. Artikel ini akan membantu kamu memahami perbedaannya secara mendalam.
Apa itu Laravel Sanctum?
Laravel Sanctum adalah sistem autentikasi yang ringan dan sederhana. Sanctum dirancang untuk dua use case utama:
- SPA (Single Page Application) โ seperti Vue.js atau React yang berkomunikasi dengan backend Laravel.
- Aplikasi mobile / simple token-based API โ token disimpan di tabel database.
Sanctum menggunakan cookie-based session untuk SPA dan personal access token untuk mobile/API sederhana. Tidak ada implementasi OAuth2 di sini.
Apa itu Laravel Passport?
Laravel Passport adalah implementasi OAuth2 server penuh untuk Laravel. Passport menggunakan library league/oauth2-server di baliknya. Passport cocok untuk:
- API yang diakses oleh aplikasi pihak ketiga (third-party clients).
- Skenario yang membutuhkan grant type OAuth2: authorization code, client credentials, password grant, dll.
- Platform besar yang membutuhkan manajemen OAuth2 token secara granular.
Perbandingan Fitur Utama
- Kompleksitas: Sanctum sangat ringan; Passport lebih kompleks karena implementasi OAuth2 penuh.
- Token Storage: Sanctum menyimpan token di tabel
personal_access_tokens; Passport menggunakan beberapa tabel OAuth2. - Scope/Permission: Keduanya mendukung scope/abilities token, namun Passport lebih lengkap.
- Refresh Token: Hanya Passport yang mendukung refresh token secara native.
- Third-party OAuth: Hanya Passport yang bisa menjadi OAuth2 provider untuk aplikasi eksternal.
Kapan Pakai Sanctum?
Gunakan Sanctum jika:
- Kamu membangun SPA (Vue/React) yang mengkonsumsi API Laravel sendiri.
- Kamu membangun aplikasi mobile yang hanya perlu login dan token sederhana.
- Tidak ada kebutuhan untuk menjadi OAuth2 provider bagi pihak ketiga.
- Kamu ingin setup yang cepat dan ringan.
Instalasi dan Konfigurasi Sanctum
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
Tambahkan trait HasApiTokens ke model User:
<?php
namespace App\Models;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens;
// ...
}
Contoh login dan issue token dengan Sanctum:
// routes/api.php
Route::post('/login', function (Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
return response()->json(['message' => 'Invalid credentials'], 401);
}
$token = $user->createToken('api-token')->plainTextToken;
return response()->json(['token' => $token]);
});
// Protect routes
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Kapan Pakai Passport?
Gunakan Passport jika:
- API kamu akan diakses oleh aplikasi pihak ketiga yang tidak kamu kontrol.
- Kamu membutuhkan alur authorization code (seperti "Login with YourApp").
- Kamu membutuhkan refresh token otomatis.
- Kamu membangun platform skala enterprise dengan manajemen client OAuth2.
Instalasi dan Konfigurasi Passport
composer require laravel/passport
php artisan migrate
php artisan passport:install
Tambahkan trait HasApiTokens dari Passport ke model User:
<?php
namespace App\Models;
use Laravel\Passport\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens;
// ...
}
Daftarkan Passport di AuthServiceProvider (Laravel 10 ke bawah):
use Laravel\Passport\Passport;
public function boot(): void
{
Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
}
Update guard di config/auth.php:
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Ringkasan Perbandingan
- Sanctum: Ringan, cocok untuk SPA & mobile app milik sendiri, setup cepat, tidak perlu OAuth2.
- Passport: Lengkap, cocok untuk OAuth2 provider, third-party integration, mendukung refresh token.
Kesimpulan
Untuk sebagian besar proyek Laravel modern โ terutama SPA atau aplikasi mobile yang mengkonsumsi API Laravel sendiri โ Sanctum adalah pilihan yang tepat. Pilih Passport hanya jika kamu memang membutuhkan fitur OAuth2 penuh, seperti menjadi provider untuk aplikasi pihak ketiga. Jangan over-engineer: gunakan tool yang paling sederhana yang memenuhi kebutuhanmu.