JSON Web Token
- JWT adalah standar terbuka (RFC 7519) untuk pertukaran data secara aman
- Data dikemas dalam bentuk token berbasis JSON
- Umumnya digunakan untuk authentication dan authorization
- Bersifat stateless (server tidak menyimpan session)
Penjelasan: JWT memungkinkan server mengenali user tanpa menyimpan data session di server. Setiap request membawa token, sehingga cocok untuk REST API dan SPA.
Struktur JWT
- Terdiri dari tiga bagian: Header, Payload, dan Signature
- Dipisahkan oleh tanda titik (.)
- Format: header.payload.signature
Penjelasan: JWT bukan data yang terenkripsi secara default, tetapi ditandatangani (signed) agar tidak bisa diubah tanpa diketahui server.
Header
- Berisi informasi algoritma dan tipe token
- Contoh: alg (HS256), typ (JWT)
Penjelasan: Header memberi tahu server bagaimana token ditandatangani.
Payload
- Berisi klaim (claims) atau data user
- Contoh: user id, role, expiry time
Penjelasan: Payload bisa dibaca siapa saja, jadi jangan menyimpan data sensitif seperti password atau data rahasia.
Signature
- Digunakan untuk verifikasi keaslian token
- Dibuat dari header, payload, dan secret key
Penjelasan: Signature memastikan token tidak diubah oleh pihak lain.
Alur Penggunaan JWT
- User login dengan username dan password
- Server memverifikasi kredensial
- Server mengirim JWT ke client
- Client menyimpan JWT (biasanya di memory atau storage)
- Client mengirim JWT di setiap request
Penjelasan: Jika token valid, server mempercayai request tanpa perlu cek session.
Penggunaan JWT di Web Application
- Digunakan pada REST API
- Cocok untuk SPA (React, Vue, dll)
- Digunakan untuk microservices authentication
Penjelasan: Karena stateless, JWT mudah diskalakan dan tidak bergantung pada server tertentu.
Cara Mengirim JWT
- Melalui HTTP Header (Authorization)
- Format: Authorization: Bearer [TOKEN]
Penjelasan: Mengirim token lewat header lebih aman dibanding query string.
Kelebihan JWT
- Stateless dan scalable
- Mudah diintegrasikan
- Tidak bergantung pada session server
Kekurangan JWT
- Sulit untuk revoke token sebelum expired
- Jika bocor, token bisa disalahgunakan
- Ukuran token lebih besar dari session id
Best Practice Penggunaan JWT
- Gunakan expiry time yang pendek
- Simpan secret key dengan aman
- Jangan simpan data sensitif di payload
- Gunakan HTTPS
- Kombinasikan dengan refresh token jika perlu