Daftar Isi
- Langkah-langkah menambahkan otentikasi JWT di Laravel secara lengkap
- 1. Persiapan proyek Laravel
- 2. Instalasi paket JWT Auth
- 3. Generate secret key untuk JWT
- 4. Konfigurasi auth guard
- 5. Membuat controller otentikasi
- 6. Menetapkan route API
- 7. Menguji otentikasi JWT dengan Postman atau Insomnia
- Tips keamanan tambahan saat menambahkan otentikasi JWT di Laravel
- Integrasi dengan fitur Laravel lainnya
- Contoh penggunaan JWT dalam proyek nyata
- Penyelesaian masalah umum
- Menambahkan otentikasi JWT di Laravel pada skala tim
- Perbandingan JWT dengan metode otentikasi lain di Laravel
- Penutup
Di era aplikasi berbasis API, keamanan menjadi salah satu faktor krusial yang tak boleh diabaikan. Salah satu solusi yang cukup populer adalah menggunakan JSON Web Token (JWT) untuk otentikasi. Jika Anda sedang mengerjakan proyek Laravel dan ingin menambahkan otentikasi JWT di Laravel, artikel ini akan membantu Anda memahami setiap langkahnya secara mendetail.
Laravel memang sudah menyediakan sistem otentikasi berbasis session, namun untuk aplikasi yang berinteraksi lewat RESTful API, pendekatan token lebih cocok. JWT memberikan kelebihan berupa stateless authentication, yang berarti server tidak perlu menyimpan sesi secara tradisional. Dengan menambahkan otentikasi JWT di Laravel, Anda dapat menjaga keamanan endpoint API sekaligus meningkatkan performa aplikasi.
Pada tulisan ini, kita akan membahas persiapan lingkungan, instalasi paket, konfigurasi, serta contoh implementasi pada route dan controller. Tak hanya itu, Anda juga akan menemukan tips praktis yang dapat memperkaya pengetahuan tentang keamanan API di Laravel.
Langkah-langkah menambahkan otentikasi JWT di Laravel secara lengkap
Berikut urutan tahapan yang perlu Anda ikuti untuk menambahkan otentikasi JWT di Laravel. Setiap langkah disertai penjelasan singkat agar Anda tidak bingung saat mengerjakannya.
1. Persiapan proyek Laravel
- Pastikan Anda sudah menginstall Composer dan PHP versi 8.0 ke atas.
- Buat proyek Laravel baru atau gunakan proyek yang sudah ada:
composer create-project --prefer-dist laravel/laravel my-api
- Jalankan
php artisan serveuntuk memastikan aplikasi berjalan dengan baik.
2. Instalasi paket JWT Auth
Paket yang paling banyak dipakai untuk JWT di Laravel adalah tymon/jwt-auth. Instalasi dilakukan via Composer:
composer require tymon/jwt-auth
Setelah instalasi selesai, publish konfigurasi paket dengan perintah:
php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
Langkah ini akan membuat file config/jwt.php yang dapat Anda sesuaikan nanti.
3. Generate secret key untuk JWT
JWT memerlukan secret key untuk menandatangani token. Jalankan perintah berikut untuk menghasilkan key secara otomatis:
php artisan jwt:secret
Perintah di atas akan menambahkan variabel JWT_SECRET ke file .env Anda. Simpan file tersebut dan pastikan tidak di-commit ke repositori publik.
4. Konfigurasi auth guard
Laravel menggunakan konsep guards untuk mengelola cara otentikasi. Buka file config/auth.php dan tambahkan guard baru bernama api yang menggunakan driver jwt:
'guards' => [
// ...
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
Dengan konfigurasi ini, Laravel akan otomatis memproses token JWT pada request yang menggunakan guard api.
5. Membuat controller otentikasi
Selanjutnya, buat controller khusus untuk proses login, logout, dan registrasi. Jalankan:
php artisan make:controller AuthController
Isi controller dengan metode berikut:
validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:6|confirmed',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
]);
$token = JWTAuth::fromUser($user);
return response()->json(compact('user','token'), 201);
}
// Login pengguna
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Invalid Credentials'], 401);
}
return response()->json(compact('token'));
}
// Logout (invalidate token)
public function logout()
{
JWTAuth::invalidate(JWTAuth::getToken());
return response()->json(['message' => 'Successfully logged out']);
}
// Dapatkan data pengguna yang sedang login
public function me()
{
return response()->json(auth()->user());
}
}
Metode register sekaligus mengembalikan token JWT, sehingga klien tidak perlu melakukan login terpisah setelah registrasi.
6. Menetapkan route API
Tambahkan endpoint pada file routes/api.php:
use AppHttpControllersAuthController;
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
Route::group(['middleware' => ['auth:api']], function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::get('me', [AuthController::class, 'me']);
// Tambahkan route lain yang memerlukan otentikasi di sini
});
Dengan menambahkan middleware auth:api, semua route di dalam grup tersebut otomatis memeriksa keberadaan token JWT yang valid.
7. Menguji otentikasi JWT dengan Postman atau Insomnia
Berikut langkah cepat untuk memastikan semuanya berfungsi:
- Kirim
POST /api/registerdengan payload{ "name": "Budi", "email": "budi@example.com", "password": "secret", "password_confirmation": "secret" }. Anda akan menerimatokendi respon. - Gunakan token tersebut pada header
Authorization: Bearer {token}untuk mengaksesGET /api/me. Jika token valid, Anda akan melihat data pengguna. - Coba
POST /api/logoutdengan header yang sama, lalu ulangiGET /api/me. Sekarang harusnya mendapat error 401 karena token sudah tidak berlaku.
Tips keamanan tambahan saat menambahkan otentikasi JWT di Laravel
- Atur masa berlaku token. Di file
config/jwt.php, sesuaikan nilaittl(time to live) agar token kadaluarsa setelah periode tertentu, misalnya 60 menit. - Gunakan refresh token. Implementasikan endpoint
/api/refreshyang memanggilJWTAuth::refresh()untuk memperpanjang masa hidup token tanpa harus login ulang. - Whitelist domain. Jika API Anda diakses dari frontend tertentu, pertimbangkan menambahkan middleware CORS yang membatasi asal permintaan.
- Validasi payload. Selalu validasi input pengguna menggunakan
FormRequestatau metodevalidate()Laravel agar tidak ada data berbahaya yang masuk.
Integrasi dengan fitur Laravel lainnya
Setelah berhasil menambahkan otentikasi JWT di Laravel, Anda dapat menggabungkannya dengan fitur lain seperti:
- Laravel Sanctum. Jika proyek Anda membutuhkan token berbasis cookie untuk SPA, pertimbangkan menggunakan Sanctum bersamaan dengan JWT untuk API publik.
- Event broadcasting. Kirim notifikasi real‑time menggunakan Laravel Echo setelah login berhasil, sehingga UI dapat menampilkan status pengguna secara dinamis.
- Rate limiting. Laravel menyediakan middleware
throttleyang dapat diterapkan pada endpoint otentikasi untuk mencegah serangan brute‑force.
Contoh penggunaan JWT dalam proyek nyata
Misalkan Anda sedang membangun aplikasi Jasa Pembuatan Aplikasi Web Custom yang melayani klien bisnis. API yang Anda sediakan harus melindungi data sensitif seperti invoice, laporan proyek, dan data klien. Dengan menambahkan otentikasi JWT di Laravel, setiap permintaan ke endpoint /api/invoices atau /api/projects dapat dipastikan berasal dari pengguna yang sudah terotentikasi.
Selain itu, untuk integrasi dengan layanan pihak ketiga, Anda dapat memanfaatkan JWT sebagai mekanisme pertukaran data yang aman. Misalnya, saat menghubungkan sistem ERP eksternal, token JWT dapat dikirimkan di header Authorization sehingga ERP hanya dapat mengakses data yang diizinkan.
Penyelesaian masalah umum
- Token tidak dikenali. Pastikan header Authorization dituliskan dengan tepat:
Authorization: Bearer YOUR_TOKEN. Kesalahan penulisan “bearer” kecil/kapital tidak memengaruhi, namun spasi ekstra dapat menyebabkan error. - Kesalahan konfigurasi guard. Jika Anda mendapatkan error “Token not provided”, periksa kembali
config/auth.phpdan pastikan guardapimenggunakan driverjwt. - Cache token yang sudah kadaluarsa. Laravel dapat menyimpan token di cache. Jika Anda menggunakan
cachedriver selainarray, pastikan konfigurasijwt.ttlsesuai dengan kebijakan cache.
Menambahkan otentikasi JWT di Laravel pada skala tim
Jika Anda bekerja dalam tim pengembangan, ada baiknya mendokumentasikan prosedur instalasi dan konfigurasi JWT dalam file README proyek. Sertakan perintah composer require, php artisan jwt:secret, serta contoh request menggunakan Postman. Dengan begitu, anggota tim baru dapat dengan cepat menyiapkan lingkungan kerja yang konsisten.
Selain itu, integrasikan proses CI/CD untuk memeriksa keberadaan JWT_SECRET pada file .env.example. Hindari menaruh nilai rahasia di repository publik; gunakan layanan seperti GitHub Secrets atau GitLab CI variables untuk mengelola variabel lingkungan secara aman.
Perbandingan JWT dengan metode otentikasi lain di Laravel
Berikut tabel singkat yang membandingkan JWT dengan Laravel Sanctum dan session‑based authentication:
| Metode | Kelebihan | Kekurangan |
|---|---|---|
| JWT | Stateless, mudah dipakai pada microservices, cocok untuk mobile & SPA | Token tidak dapat dicabut sebelum kadaluarsa, membutuhkan pengelolaan refresh token |
| Sanctum | Simple token untuk SPA, dapat menggunakan cookie, built‑in revocation | Kurang cocok untuk aplikasi multi‑domain atau mobile native |
| Session | Manajemen sesi otomatis Laravel, cocok untuk aplikasi tradisional | Stateful, tidak ideal untuk API yang diakses lintas domain |
Pilihlah metode yang paling sesuai dengan arsitektur sistem Anda. Jika fokus utama adalah API publik yang melayani aplikasi mobile, menambahkan otentikasi JWT di Laravel merupakan pilihan yang tepat.
Penutup
Dengan mengikuti langkah‑langkah di atas, Anda sudah berhasil menambahkan otentikasi JWT di Laravel dan siap melindungi endpoint API Anda secara efektif. Ingatlah untuk selalu memperbarui dependensi, mengatur masa berlaku token, serta menerapkan praktik keamanan terbaik seperti rate limiting dan CORS. Jika proyek Anda melibatkan kolaborasi dengan tim luar negeri atau penyedia jasa, pastikan semua pihak memahami alur otentikasi yang telah Anda terapkan. Untuk informasi lebih lengkap tentang proses kolaborasi dengan tim pengembang luar negeri, kunjungi FAQ tentang proses pembuatan aplikasi dengan tim pengembang luar negeri – Panduan Lengkap. Selamat mencoba, semoga API Anda menjadi lebih aman dan handal.




