Apa arti « decode JWT »?
Decode JWT (« jwt decode », « decode jwt online ») berarti memotong string pada dua titik, lalu mendecode tiap segmen Base64URL untuk mengembalikan JSON semula. Tidak diperlukan kunci: header dan payload memang hanya di-encode, bukan dienkripsi. Inilah persis maksud di balik « jwt payload decoder » atau « decode jwt without verify » — melihat isi token tanpa mengklaimnya otentik.
Pastikan Anda membedakan kedua hal ini dengan jelas. Membaca JWT tidak membuktikan apa pun: siapa pun bisa membuat token dengan payload yang meyakinkan lalu menandatanganinya dengan secret-nya sendiri. Verifikasi signature membuktikan bahwa isi tidak diubah pihak ketiga. Decoder yang menampilkan « admin: true » tanpa verifikasi signature hanya mengarang cerita, bukan fakta.
Tiga segmen sebuah JWT
String dipotong persis menjadi tiga bagian yang dipisahkan titik: header.payload.signature. Header minimal berisi alg dan typ, terkadang kid untuk menandai kunci mana yang dipakai. Payload berisi claims, pasangan kunci-nilai yang registrasinya dipegang IANA. Signature mencakup dua segmen pertama persis seperti ditulis — perubahan sekecil apa pun pada spasi atau karakter akan menggagalkan perbandingan.
Semua kerumitan berasal dari kenyataan bahwa segmen ini memakai Base64URL, bukan Base64: tanda plus menjadi tanda hubung, garis miring menjadi garis bawah, dan padding = hilang. Decoder Base64 klasik karena itu akan gagal pada JWT yang valid. Tabel « Base64URL vs Base64 klasik » di tab referensi menunjukkan persis substitusi ini.
Cara memverifikasi signature: HS256, RS256, ES256
Untuk algoritma HMAC — HS256, HS384, HS512 — secret yang sama dipakai untuk menandatangani dan memverifikasi: alat menghitung ulang HMAC(secret, base64url(header) + "." + base64url(payload)) lalu membandingkan hasilnya dengan signature terbawa. Ini kasus paling umum, sekaligus paling berbahaya: layanan mana pun yang memegang secret bisa menerbitkan token. Secret kurang dari 32 byte yang dipakai ulang lintas lingkungan sudah cukup untuk membobol seluruh rantai.
Untuk algoritma asimetris — RS256, RS384, RS512, ES256, ES384, ES512, PS256 — Anda hanya butuh kunci publik untuk verifikasi, sehingga bisa memeriksa token dari pihak ketiga tanpa pernah berbagi secret signature-nya. Tempelkan kunci format PEM -----BEGIN PUBLIC KEY----- (SPKI); hasil mentah ekspor OpenSSL bisa langsung dipakai. Untuk ES256, signature berformat r||s mentah, format yang diharapkan WebCrypto.
Terakhir, waspadai alg confusion : jika layanan Anda menuntut RS256 tetapi menerima token yang header-nya menyatakan HS256, penyerang akan menandatangani dengan kunci publik — yang berubah menjadi kunci HMAC — dan lolos verifikasi. Tetapkan algoritma yang diharapkan di sisi server; jangan pernah membacanya dari token itu sendiri.
exp, iat, nbf: timestamp yang menjebak
Ketiga claim ini adalah detik Unix, tanpa milidetik dan tanpa zona waktu: iat pada 1516239022 berarti 2018-01-17T21:30:22Z. Dua kesalahan muncul terus-menerus: membandingkan dengan tanggal dalam milidetik (nilainya sepuluh ribu kali terlalu besar) dan menafsirkan timestamp sebagai waktu lokal alih-alih UTC. Tab « Kedaluwarsa » mengonversi ke dua arah, menampilkan ISO 8601, tanggal lokal, serta sisa atau berlalu waktu — untuk langsung menangkap token « sudah kedaluwarsa » hingga detik.
Memperpanjang masa berlaku tidak menaikkan tingkat keamanan: sebuah exp yang ditunda hanya mengubah nilai yang ditampilkan, bukan signature. Jika harus menerbitkan ulang, tanda tangani lagi token dengan secret atau kunci privat — itulah peran tab « Encode ».
Base64URL: mengapa decoder klasik gagal
Base64URL (RFC 4648 §5) memakai alfabet A-Z a-z 0-9 - _ dan tidak menerima padding. Payload 20 karakter sering menghasilkan panjang yang bukan kelipatan empat setelah penghapusan = : itu normal, bukan kerusakan. Karakter - dan _ membingungkan bagi mata manusia, dan itu menjelaskan separuh laporan « token rusak ». Decoder kami menerima kedua alfabet, huruf besar-kecil campuran, padding opsional, serta awalan Bearer.
Keamanan: apa yang tidak dilakukan JWT
JWT tidak menawarkan kerahasiaan maupun pencabutan. Payload dapat dibaca siapa pun: jangan pernah memuat e-mail, peran internal, atau data pribadi yang tak mau Anda kirimkan secara terbuka. Dan token yang ditandatangani tetap valid hingga exp setelah logout pun — diperlukan daftar pencabutan, pelacakan jti di sisi server, atau masa berlaku singkat dengan refresh token. Kebiasaan baik: exp pendek (10 hingga 15 menit), iat dikendalikan, nbf diselaraskan dengan iat, aud dan iss diverifikasi saat diterima.
Direkomendasikan untuk
Pengembang back-end dan front-end (OAuth 2.0, OpenID Connect, REST API), integrator dan DevOps (infrastruktur identitas, JWKS, rotasi kunci), QA dan pentester (modifikasi claims, alg confusion, kedaluwarsa), administrator sistem (debug 401 yang tak terjelaskan), mahasiswa (memahami Base64URL dan WebCrypto), serta siapa pun yang membutuhkan decoder JWT online cepat, lengkap, dan privat — dilengkapi juga dengan encoder decoder Base64, encoder decoder URL dan pemformat JSON.