JWT Decoder
Dekode dan inspeksi JSON Web Token. Verifikasi tanda tangan butuh kunci penanda tangan dan harus dilakukan di sisi server — alat ini hanya menampilkan isi.
Header
Payload
Tanda tangan
- Salin JWT dari aplikasi, respons API, atau header Authorization Anda.
- Tempel ke kotak. Pendekodean berjalan otomatis saat Anda mengetik.
- Baca header dan payload yang sudah didekode; tanda tangan ditampilkan apa adanya sebagai referensi.
- Cek ringkasan klaim waktu (iat, exp, nbf) untuk menangkap token kedaluwarsa.
Apa fungsinya?
JSON Web Token adalah tiga segmen yang dikodekan base64url dan dihubungkan dengan titik: header.payload.signature. Header dan payload adalah JSON; tanda tangan adalah keluaran HMAC atau RSA/ECDSA atas dua segmen pertama. Alat ini memecah pada titik, men-decode setiap bagian dengan base64url, mem-parse JSON, dan menampilkan klaim waktu standar seperti exp sebagai tanggal yang mudah dibaca. Alat ini tidak memverifikasi tanda tangan — lihat FAQ di bawah mengapa.
Contoh
Token sampel dari spesifikasi JWT (HS256 ditandatangani dengan rahasia your-256-bit-secret):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c Header terdekode:
{
"alg": "HS256",
"typ": "JWT"
} Payload terdekode:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
} Kenapa tanda tangan JWT saya ditandai tidak valid?
Dekoder ini tidak memeriksa tanda tangan (lihat FAQ), tetapi jika verifikator di sisi server menolak token Anda, inilah penyebab yang biasa.
- Rahasia atau kunci salah. Selisih satu karakter pada rahasia HMAC menghasilkan tanda tangan yang sama sekali berbeda. Pastikan env var JWT_SECRET pada layanan pemvalidasi cocok dengan penerbit.
- Algoritma tidak cocok. Token yang ditandatangani dengan HS256 tidak bisa diverifikasi dengan RS256. Cek klaim alg di header dan pastikan verifikator dikonfigurasi untuk algoritma yang sama.
- Token kedaluwarsa. JWT yang ditandatangani dengan benar pun gagal divalidasi begitu exp sudah lewat. Ringkasan klaim waktu memperlihatkan ini secara eksplisit setelah didekode.
- Beda jam. nbf (not-before) sedikit di masa depan plus drift jam server memunculkan error "token not yet valid". Beri sedikit toleransi (misalnya 60 detik) di verifikator Anda.
- Spasi di token yang ditempel. Salin-tempel kadang membawa spasi di awal atau baris baru di akhir. JWT harus persis header.payload.signature tanpa spasi di sekelilingnya.
- alg: none. Jika header berkata "alg": "none" berarti token tidak ditandatangani. Tolak token seperti ini di verifikator — jangan pernah anggap valid.
Pertanyaan yang sering diajukan
Bisakah alat ini memverifikasi tanda tangan JWT?
Tidak, dan itu disengaja. Memverifikasi tanda tangan butuh kunci penanda tangan — rahasia HMAC atau kunci publik asimetris. Kunci itu tempatnya di server yang menerbitkan atau mengonsumsi token, bukan ditempel ke halaman web. Alat ini hanya men-decode dan menampilkan; verifikasi terjadi di server pada backend Anda.
Apa isi dari masing-masing tiga segmen JWT?
JWT adalah header.payload.signature. Header adalah JSON yang mendeskripsikan algoritma (alg) dan tipe token. Payload adalah JSON berisi klaim seperti sub, iat, exp. Tanda tangan adalah keluaran base64url dari penandatanganan dua segmen pertama dengan rahasia atau kunci privat. Dua yang pertama hanya dikodekan, bukan dienkripsi.
JWT saya kedaluwarsa — bagaimana cara tahu?
Lihat klaim exp di payload. Itu stempel waktu Unix dalam detik. Jika Date.now() / 1000 lebih besar dari exp, token kedaluwarsa. Alat ini merender exp, iat, dan nbf sebagai tanggal yang mudah dibaca di bawah payload agar Anda tahu sekilas tanpa menghitung sendiri.
Apa maksud alg: none dan kenapa berbahaya?
alg: none adalah fitur JWT di mana tanda tangan kosong dan tidak diperiksa. Banyak library secara historis menerima token seperti itu, membuat penyerang bisa memalsukan JWT dengan menyusun payload dan menyetel alg ke none. Kalau Anda lihat nilai header ini, tokennya tidak ditandatangani — jangan percaya server yang menerimanya.
Apakah Anda menyimpan JWT yang saya tempel di sini?
Tidak. Kami tidak menyimpan token yang Anda tempel di dekoder. Apa pun yang Anda masukkan dibuang saat Anda menutup atau menyegarkan tab — tidak ada log, tidak ada catatan di sisi kami atas token yang Anda inspeksi. Tetap: JWT memberi akses sampai exp-nya, perlakukan seperti kata sandi dan rotasi token produksi mana pun yang Anda debug.
Bagian tanda tangan menunjukkan blob yang tak terbaca — normal?
Ya. Tanda tangan adalah keluaran biner dari HMAC atau RSA/ECDSA, dikodekan base64url. Tidak dimaksudkan agar bisa dibaca manusia — hanya sebagai pemeriksaan kriptografis. Header dan payload terdekode adalah bagian JSON yang Anda pakai. Tanda tangan kosong berarti token tidak ditandatangani (alg: none).