Pada tutorial ini, kita akan memperkenalkan JSON Web Token (JWT) dan menjelaskan konsep kerjanya. JWT adalah standar terbuka (RFC 7519) untuk mengamankan data dalam bentuk JSON yang dikirimkan melalui permintaan HTTP. JWT populer digunakan untuk autentikasi dan otorisasi dalam aplikasi web dan API, termasuk dalam implementasi JWT Authentication di Laravel 9.
Pengertian JSON Web Token (JWT)
JSON Web Token (JWT) adalah representasi terenkripsi dari informasi yang diberikan dalam bentuk JSON. JWT terdiri dari tiga bagian, yaitu Header, Payload, dan Signature. Bagian Header dan Payload adalah data JSON yang dikodekan menjadi bentuk Base64 URL-safe. Bagian Signature berisi tanda tangan yang digunakan untuk memverifikasi keaslian token.
Konsep Kerja JWT
1. Authentication (Autentikasi)
Ketika pengguna login, server akan menghasilkan JWT yang berisi klaim (claims) tentang identitas pengguna dan informasi tambahan. JWT ini akan dikirimkan ke pengguna sebagai token.
2. Authorization (Otorisasi)
Setelah login, pengguna akan menyertakan token JWT di setiap permintaan yang diarahkan ke server. Token JWT ini akan diverifikasi oleh server untuk memastikan keaslian dan integritasnya.
3. Token Verifikasi
Untuk memverifikasi token, server menggunakan kunci rahasia yang hanya diketahui oleh server. Dengan menggunakan kunci ini, server dapat memastikan bahwa token tidak dimanipulasi dan valid.
4. Penjagaan Keaslian
Dengan menggunakan JWT, server tidak perlu menyimpan status login pengguna di sisi server. Sebagai gantinya, status login disimpan dalam bentuk token di sisi klien. Ini memungkinkan aplikasi menjadi stateless dan memudahkan skalabilitas.
5. Pembaruan Token
Untuk mencegah token dicuri dan digunakan secara tidak sah, JWT memiliki masa berlaku (expiry time). Jika token telah habis masa berlakunya, pengguna harus meminta token baru untuk melanjutkan akses.
6. Keuntungan
Penggunaan JWT memungkinkan otorisasi antar domain, mengurangi beban server dalam menyimpan sesi, dan memungkinkan berkomunikasi antar layanan yang aman dan terenkripsi.
Implementasi Laravel 9 JWT Authentication: API Login & Signup
Langkah 1: Instalasi Laravel dan Konfigurasi Database
Pastikan Anda telah menginstal Laravel 9 dan mengkonfigurasi file .env
dengan pengaturan database yang sesuai.
Langkah 2: Instalasi Diperlukan
Instal paket JWT dan diperlukan menggunakan Composer:
composer require tymon/jwt-auth
Publish konfigurasi JWT:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Langkah 3: Migrasi Tabel dan Konfigurasi Model User
Jalankan migrasi untuk menambahkan kolom ke tabel users
:
php artisan migrate
Tambahkan use JWTSubject
dan implementasikan method-method yang diperlukan pada model User (app/Models/User.php
):
use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { // ... public function getJWTIdentifier() { return $this->getKey(); } public function getJWTCustomClaims() { return []; } }
Langkah 4: Konfigurasi JWT
Buka file config/auth.php
, dan sesuaikan guard dan provider untuk menggunakan jwt
:
'guards' => [ 'web' => [ // ... ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ],
Langkah 5: Buat API Route dan Controller
Tambahkan route dan controller untuk login dan signup di file routes/api.php
:
use App\Http\Controllers\AuthController; Route::post('login', [AuthController::class, 'login']); Route::post('signup', [AuthController::class, 'signup']);
Buat controller AuthController
dengan perintah:
php artisan make:controller AuthController
Kemudian pada controller, tambahkan logika login dan signup:
use JWTAuth; use Illuminate\Support\Facades\Hash; use Illuminate\Http\Request; use App\Models\User; class AuthController extends Controller { public function login(Request $request) { $credentials = $request->only('email', 'password'); if (!$token = JWTAuth::attempt($credentials)) { return response()->json(['error' => 'Unauthorized'], 401); } return response()->json(['token' => $token]); } public function signup(Request $request) { $user = new User([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $user->save(); return response()->json(['message' => 'Successfully registered']); } }
Langkah 6: Uji API
Anda sekarang dapat menguji API dengan menggunakan endpoint login dan signup yang telah dibuat:
- Untuk login, kirimkan permintaan POST ke
/api/login
dengan data email dan password. - Untuk signup, kirimkan permintaan POST ke
/api/signup
dengan data name, email, dan password.
Kesimpulan
Dalam tutorial ini, Anda telah belajar cara mengimplementasikan JWT Authentication di Laravel 9 untuk mengamankan API. Dengan menggunakan JWT, Anda dapat membuat login dan signup API endpoints yang aman dan efisien. Penggunaan JWT memungkinkan autentikasi dan otorisasi yang aman dalam aplikasi web dan API, serta menjaga keaslian dan integritas data yang dikirim melalui permintaan HTTP. Dengan cara ini, Anda dapat membangun aplikasi web yang lebih aman, efisien, dan skalabel. Selamat mencoba!