Cara mendekode dan memeriksa token JWT
Token JSON Web Token (JWT) adalah cara paling umum untuk menangani autentikasi dalam aplikasi web modern. Ketika ada yang salah di sisi auth — pengguna keluar tanpa alasan, izin salah, atau API mengembalikan 401 — mendekode JWT sering menjadi langkah debugging pertama.
Apa yang dimuat JWT
JWT memiliki tiga bagian yang dipisahkan oleh titik:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U
Header — berisi algoritma (HS256, RS256, dll.) dan jenis token.
{"alg": "HS256", "typ": "JWT"}
Payload — berisi klaim (pernyataan) tentang pengguna dan token.
{"sub": "1234567890", "name": "Alice", "exp": 1700000000}
Tanda tangan — sidik jari kriptografis yang menjamin token tidak diubah. Anda tidak dapat membacanya tanpa kunci tanda tangan.
Klaim JWT umum
| Klaim | Nama lengkap | Konten |
|---|---|---|
sub |
Subject | ID atau pengenal pengguna |
exp |
Expiration | Timestamp Unix akhir validitas |
iat |
Issued At | Timestamp Unix pembuatan |
iss |
Issuer | Siapa yang membuat token (server auth Anda) |
aud |
Audience | Untuk siapa token ditujukan |
nbf |
Not Before | Token tidak valid sebelum tanggal ini |
jti |
JWT ID | Pengenal unik token |
Cara mendekode JWT
- Tempel token Anda — masukkan JWT lengkap (format header.payload.tanda_tangan) ke decoder.
- Lihat bagian yang didekode — alat menampilkan header (algoritma), payload (klaim), dan tanda tangan sebagai JSON yang diformat.
- Verifikasi klaim — periksa tanggal kedaluwarsa, penerbit, subjek, dan klaim kustom apa pun.
Debugging dengan JWT
Token kedaluwarsa? Periksa klaim exp. Konversikan timestamp Unix ke tanggal yang dapat dibaca. Jika sudah lewat, token telah kedaluwarsa dan harus disegarkan.
Izin salah? Cari klaim peran atau cakupan dalam payload. Mereka bervariasi menurut implementasi tetapi sering tampak seperti "role": "admin" atau "scope": "read write".
Masalah identitas pengguna? Klaim sub mengidentifikasi pengguna. Verifikasi bahwa itu cocok dengan ID yang diharapkan.
Token ditolak? Periksa klaim aud (audience). Jika API mengharapkan audience tertentu dan token memiliki audience lain, akan ditolak.
Catatan keamanan penting
- JWT tidak dienkripsi — siapa pun dapat mendekode payload. Jangan masukkan kata sandi, kunci API, atau rahasia lain dalam JWT.
- Selalu verifikasi tanda tangan di sisi server — decoder menunjukkan apa yang diklaim token, tetapi hanya verifikasi tanda tangan yang membuktikan tidak diubah.
- Periksa kedaluwarsa — token yang kedaluwarsa harus selalu ditolak. Jika aplikasi Anda menerima token yang kedaluwarsa, itu adalah celah keamanan.
Pertanyaan yang sering diajukan
Bisakah saya memverifikasi tanda tangan JWT dengan decoder?
Tidak. Verifikasi tanda tangan memerlukan rahasia tanda tangan atau kunci publik, yang disimpan di server Anda. Decoder menunjukkan apa yang ada di token, tetapi verifikasi kriptografis harus terjadi di backend Anda. Jangan pernah memercayai JWT yang tidak diverifikasi dalam produksi.
Apakah aman menempel JWT ke alat online?
Ya, ketika alat berjalan di peramban Anda. Decoder di peramban memproses token secara lokal — tidak ada yang dikirim ke server. Hindari alat yang membuat permintaan jaringan dengan token Anda.
Apa itu klaim exp?
Klaim exp (expiration) adalah timestamp Unix yang menunjukkan kapan token kedaluwarsa. Setelah tanggal ini, token harus ditolak. Selalu periksa klaim ini untuk men-debug masalah autentikasi.
Bisakah JWT dienkripsi?
JWT standar (JWS) ditandatangani tetapi tidak dienkripsi — siapa pun dapat mendekode payload. Token JWE (JSON Web Encryption) dienkripsi, tetapi kurang umum. Jangan pernah memasukkan data sensitif (kata sandi, rahasia) dalam payload JWT standar.