Pernah bertanya-tanya bagaimana sebuah aplikasi bisa tahu bahwa Anda masih login setelah berpindah dari satu halaman ke halaman lain, bahkan antar layanan yang berbeda? Jawabannya sering kali ada pada JWT (JSON Web Token). Bagi developer yang baru menyentuh dunia autentikasi modern, istilah seperti jwt token, access token, dan refresh token memang terdengar membingungkan, padahal konsep di baliknya cukup sederhana.
Artikel ini membahas apa itu JWT, bagaimana struktur dan cara kerjanya, serta mengapa token ini menjadi standar de facto untuk autentikasi API dan aplikasi web saat ini. Setelah membaca, Anda akan paham kapan JWT tepat dipakai dan praktik keamanan apa saja yang perlu diterapkan.
Apa Itu JWT dan JWT Token?
JWT (JSON Web Token) adalah standar terbuka (RFC 7519) yang mendefinisikan cara ringkas dan mandiri (self-contained) untuk mengirimkan informasi antar pihak dalam format JSON. Informasi tersebut ditandatangani secara digital, sehingga keasliannya bisa diverifikasi dan isinya tidak bisa diubah tanpa terdeteksi.
Istilah jwt token sendiri sering dipakai pengembang untuk menyebut token hasil implementasi JWT. Dalam praktiknya, JWT paling umum digunakan untuk dua hal:
- **Autentikasi (authorization):** setelah pengguna login, server menerbitkan JWT yang menyatakan pengguna tersebut valid, lalu token ini dikirim pada setiap permintaan berikutnya.
- **Pertukaran informasi:** dua sistem dapat saling bertukar klaim (claims) yang aman karena token ditandatangani, misalnya pada alur login lintas layanan seperti OAuth 2.0 dan OpenID Connect.
Sifat self-contained inilah yang membedakan JWT dari session tradisional. Server tidak perlu menyimpan status login di memori atau database; cukup memverifikasi tanda tangan token, dan seluruh informasi identitas sudah tersedia di dalamnya.
Struktur JWT: Header, Payload, dan Signature
Sebuah JWT terdiri dari tiga bagian yang dipisahkan tanda titik, sehingga bentuknya seperti `xxxxx.yyyyy.zzzzz`. Ketiga bagian itu adalah header, payload, dan signature — masing-masing dienkode dengan Base64Url.
Header
Header berisi metadata tentang token, terutama algoritma penandatanganan yang dipakai. Contohnya:
{
"alg": "HS256",
"typ": "JWT"
}
Bagian ini memberi tahu penerima bahwa token ditandatangani memakai HMAC-SHA256. Perlu dicatat, header hanyalah dienkode, bukan dienkripsi, sehingga siapa pun bisa membacanya.
Payload
Payload berisi claims, yaitu pernyataan tentang entitas (biasanya pengguna) dan data tambahan. Ada klaim terdaftar yang standar seperti `sub` (subject/ID pengguna), `name`, `iat` (issued at), dan `exp` (expiration time), serta klaim kustom yang bisa Anda definisikan sendiri, misalnya `role` atau `permissions`.
Sama seperti header, payload hanya dienkode. Jangan pernah menaruh data sensitif seperti kata sandi atau nomor kartu kredit di dalam payload, karena siapa pun yang memegang token bisa membaca isinya dengan mudah.
Signature
Signature adalah bagian yang membuat JWT aman. Ia dihasilkan dengan menandatangani gabungan header dan payload memakai secret key (untuk algoritma simetris seperti HS256) atau private key (untuk algoritma asimetris seperti RS256). Inilah yang menjamin token tidak dimodifikasi: jika payload diubah, tanda tangan tidak akan cocok saat diverifikasi.
Cara Kerja JWT dalam Alur Autentikasi Modern
Alur kerja jwt token dalam aplikasi web atau API umumnya seperti ini:
1. Pengguna login dengan kredensial (misalnya email dan kata sandi) melalui endpoint autentikasi. 2. Server memverifikasi kredensial, lalu menerbitkan JWT yang berisi klaim identitas pengguna dan masa berlaku token. 3. Klien menyimpan token, biasanya di memori aplikasi atau cookie yang aman, kemudian melampirkannya pada setiap permintaan lewat header `Authorization: Bearer `. 4. Server memverifikasi signature dan klaim pada setiap permintaan. Jika valid dan belum kedaluwarsa, permintaan diproses tanpa perlu mencari session di database. 5. Token kedaluwarsa, pengguna memperbarui akses lewat refresh token atau login ulang.
Karena verifikasi bersifat lokal dan stateless, pendekatan ini sangat cocok untuk arsitektur microservices dan API yang menangani banyak permintaan. Setiap layanan cukup memegang kunci verifikasi yang sama (atau public key) tanpa perlu berbagi penyimpanan session.
JWT vs Session Tradisional: Kapan Memakai yang Mana?
Session berbasis cookie menyimpan ID session di sisi klien dan data session lengkapnya di server. Pendekatan ini matang, mudah dicabut (cukup hapus session di server), dan cocok untuk aplikasi web monolitik. Sebaliknya, JWT unggul ketika:
- API Anda diakses banyak klien sekaligus: web, mobile, dan layanan pihak ketiga.
- Backend terdiri dari banyak microservices yang butuh verifikasi identitas cepat tanpa panggilan tambahan.
- Anda memakai penyedia identitas terpusat (SSO) dengan standar OAuth 2.0 atau OpenID Connect.
Kelemahan utama JWT adalah pencabutan yang tidak trivial: selama token belum kedaluwarsa dan tandatangannya valid, token tetap bisa dipakai. Karena itu banyak tim memakai kombinasi access token berumur pendek (misalnya 15 menit) dan refresh token berumur lebih panjang yang bisa dicabut di sisi server.
Praktik Terbaik Keamanan JWT
Token yang ditandatangani dengan benar tetap bisa berbahaya bila implementasinya keliru. Beberapa praktik yang wajib diterapkan:
- **Selalu validasi signature dan algoritma.** Jangan pernah menerima token dengan header `alg: none`, dan jangan biarkan pilihan algoritma ditentukan oleh token yang masuk.
- **Gunakan masa berlaku singkat** (`exp`) untuk access token agar jendela serangan seminimal mungkin.
- **Kirim token lewat HTTPS** dan simpan di tempat yang aman; hindari menyimpan JWT di localStorage bila khawatir soal serangan XSS.
- **Jangan menaruh data sensitif di payload** karena isi token dapat dibaca siapa pun tanpa kunci.
- **Terapkan strategi pencabutan** untuk refresh token, misalnya daftar hitam atau rotasi token.
Rekomendasi lebih lanjut soal kebijakan autentikasi — termasuk panjang kredensial, penyimpanan rahasia, dan jenis authenticator yang layak dipakai — bisa Anda rujuk pada panduan NIST SP 800-63B tentang digital identity dan autentikasi, yang menjadi acuan banyak standar keamanan modern. Untuk memastikan implementasi autentikasi Anda bebas dari celah umum, uji juga aplikasi secara berkala mengikuti metodologi pengujian keamanan aplikasi web seperti yang dibahas pada artikel panduan pengujian keamanan aplikasi web dengan OWASP WSTG. Sementara itu, jika Anda ingin memahami lebih dalam protokol HTTP yang menjadi fondasi header `Authorization`, artikel memahami standar HTTP modern RFC 9110 bisa menjadi bacaan pelengkap.
Kesimpulan
JWT dan jwt token adalah tulang punggung autentikasi modern: ringkas, mandiri, dan mudah diverifikasi lintas layanan. Dengan memahami struktur header, payload, dan signature, serta alur penerbitan dan verifikasinya, Anda bisa memutuskan kapan JWT lebih tepat daripada session tradisional. Kuncinya ada pada disiplin implementasi: validasi tanda tangan, batasi masa berlaku, lindungi penyimpanan token, dan siapkan mekanisme pencabutan. Dengan fondasi itu, JWT menjadi cara yang aman dan skalabel untuk mengelola identitas pengguna di aplikasi Anda.
