JWT (JSON Web Token): Pengertian, Cara Kerja, Struktur, Kelebihan, dan Contoh Implementasi Lengkap
JWT (JSON Web Token): Pengertian, Cara Kerja, Struktur, Kelebihan, dan Contoh Implementasi
Di era aplikasi modern, keamanan merupakan aspek yang tidak dapat diabaikan. Salah satu teknologi yang paling banyak digunakan untuk mengamankan komunikasi antara client dan server adalah JWT (JSON Web Token).
JWT menjadi standar autentikasi pada berbagai platform seperti:
- REST API
- Single Page Application (SPA)
- Mobile Application
- Microservices
- Cloud Services
- IoT
Artikel ini akan membahas JWT secara lengkap mulai dari pengertian, struktur, cara kerja, hingga contoh implementasinya.
Apa itu JWT?
JWT atau JSON Web Token adalah sebuah standar terbuka berdasarkan RFC 7519 yang digunakan untuk mengirimkan informasi antar pihak dalam bentuk objek JSON yang telah ditandatangani secara digital.
Informasi tersebut disebut sebagai claims dan dapat dipercaya karena telah dilindungi menggunakan algoritma kriptografi.
JWT biasanya digunakan untuk:
- Login pengguna
- Authentication
- Authorization
- API Security
- Single Sign-On (SSO)
- OAuth 2.0
Mengapa JWT Banyak Digunakan?
Sebelum JWT populer, sebagian besar aplikasi menggunakan Session Authentication.
Pada Session Authentication:
- User Login
- Server membuat Session
- Session disimpan di Database atau Memory
- Client hanya menyimpan Session ID
Metode ini cukup baik, tetapi memiliki beberapa kekurangan seperti:
- Membutuhkan penyimpanan session
- Sulit diterapkan pada Microservices
- Membutuhkan Redis atau Session Server
- Tidak Stateless
JWT hadir sebagai solusi yang lebih sederhana dan efisien.
Cara Kerja JWT
Proses autentikasi menggunakan JWT terdiri dari beberapa langkah berikut:
1. User Login
Pengguna memasukkan:
- Username
- Password
Server kemudian melakukan validasi terhadap database.
2. Token Dibuat
Jika login berhasil, server akan membuat JWT yang berisi informasi seperti:
- User ID
- Username
- Role
- Expired Time
Token kemudian ditandatangani menggunakan Secret Key.
3. Token Dikirim ke Client
Server mengirimkan JWT kepada client.
Client biasanya menyimpan token pada:
- Local Storage
- Session Storage
- Secure Storage
- HttpOnly Cookie
4. Client Mengakses API
Setiap request akan membawa token pada Header.
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
5. Server Memverifikasi Token
Server melakukan validasi terhadap:
- Signature
- Expiration
- Issuer
- Audience
Jika valid maka request dapat diproses.
Struktur JWT
JWT terdiri dari tiga bagian utama.
Header.Payload.Signature
Contoh:
xxxxx.yyyyy.zzzzz
Header
Header berisi informasi mengenai algoritma yang digunakan.
Contoh:
{
"alg": "HS256",
"typ": "JWT"
}
Payload
Payload berisi informasi pengguna atau Claims.
Contoh:
{
"sub":"123456",
"name":"John Doe",
"role":"Administrator",
"exp":1716000000
}
Claims dapat berupa:
- User ID
- Username
- Role
- Permission
- Expiration
Signature
Signature dibuat menggunakan:
HMACSHA256(
Base64(Header)+"."+Base64(Payload),
SecretKey)
Signature memastikan token tidak dimodifikasi oleh pihak lain.
Jenis Claims pada JWT
JWT memiliki tiga jenis Claims.
Registered Claims
Contohnya:
- iss
- sub
- aud
- exp
- nbf
- iat
- jti
Public Claims
Claims yang dapat dibuat sendiri selama mengikuti standar.
Contoh:
{
"department":"IT"
}
Private Claims
Claims khusus yang digunakan antar aplikasi.
Misalnya:
{
"branch":"Jakarta",
"employeeId":"EMP001"
}
Kelebihan JWT
JWT memiliki berbagai kelebihan dibandingkan Session Authentication.
Stateless
Server tidak perlu menyimpan session.
Cepat
Validasi token dapat dilakukan tanpa akses database.
Mudah Digunakan
JWT dapat digunakan oleh:
- Web
- Android
- iOS
- Desktop
- IoT
Cocok untuk Microservices
JWT memungkinkan setiap layanan memverifikasi token secara mandiri.
Mendukung Single Sign-On
JWT sering digunakan pada implementasi OAuth2 dan OpenID Connect.
Kekurangan JWT
Walaupun memiliki banyak kelebihan, JWT juga memiliki beberapa kekurangan.
Sulit Melakukan Revoke
Token yang masih aktif tetap dapat digunakan hingga masa berlakunya habis.
Ukuran Token Lebih Besar
JWT lebih besar dibanding Session ID.
Tidak Cocok Menyimpan Data Sensitif
Payload JWT dapat dibaca oleh siapa saja karena hanya dienkode menggunakan Base64.
Jangan menyimpan:
- Password
- PIN
- Nomor Kartu Kredit
- Data Rahasia
JWT vs Session Authentication
| JWT | Session |
|---|---|
| Stateless | Stateful |
| Tidak menyimpan session | Menyimpan session |
| Cocok untuk API | Cocok untuk Website Tradisional |
| Skalabilitas tinggi | Membutuhkan Session Server |
| Mudah digunakan pada Mobile | Lebih cocok Browser |
Contoh Penggunaan JWT
JWT digunakan pada berbagai layanan modern seperti:
- REST API
- ASP.NET Core Web API
- Node.js API
- Spring Boot
- Laravel API
- React
- Angular
- Vue.js
- Flutter
- .NET MAUI
Best Practice Menggunakan JWT
Untuk meningkatkan keamanan aplikasi, berikut beberapa praktik terbaik.
- Gunakan HTTPS.
- Buat masa berlaku token yang singkat.
- Simpan Refresh Token secara aman.
- Jangan menyimpan password di dalam Payload.
- Validasi Signature setiap request.
- Gunakan algoritma yang kuat seperti HS256 atau RS256.
- Terapkan Refresh Token untuk memperbarui Access Token.
- Simpan token pada HttpOnly Cookie jika memungkinkan.
- Lakukan rotasi Secret Key secara berkala.
- Validasi Issuer dan Audience.
Kesimpulan
JWT (JSON Web Token) merupakan solusi autentikasi modern yang ringan, cepat, dan bersifat stateless. Teknologi ini sangat cocok digunakan pada REST API, aplikasi mobile, Single Page Application (SPA), serta arsitektur microservices karena tidak memerlukan penyimpanan session di server.
Meskipun menawarkan skalabilitas dan performa yang baik, implementasi JWT harus mengikuti praktik keamanan yang benar, seperti menggunakan HTTPS, membatasi masa berlaku token, serta mengelola Access Token dan Refresh Token dengan aman. Dengan penerapan yang tepat, JWT dapat menjadi fondasi keamanan yang andal untuk aplikasi modern.
