Menu

Decoder JWT

Bedah dan verifikasi JSON Web Token, payload demi payload.

Oleh Nethanel Bar, Co-founder & CEO

Terakhir diperbarui

Siap benar-benar belajar coding?

Coddy mengajarimu dengan menulis kode sungguhan di browser: pelajaran interaktif, umpan balik instan, dan bantuan AI saat kamu buntu.

Apa itu JWT decoder?

JWT decoder memecah JSON Web Token menjadi tiga bagiannya, yaitu header, payload, dan signature, lalu men-decode dua bagian pertama dari Base64URL sehingga kamu bisa membacanya sebagai JSON. Developer terus memakainya saat men-debug alur login, otorisasi, claim sesi, dan masalah kedaluwarsa token.

Men-decode JWT *tidak* sama dengan memercayainya. Header dan payload memang dirancang agar bisa dibaca, karena hanya di-encode dengan Base64URL, bukan dienkripsi. Verifikasi itulah yang mengecek apakah token ditandatangani oleh pihak yang diharapkan dan belum diutak-atik.

JWT berbentuk header.payload.signature. Setiap bagian di-encode dengan Base64URL dan dipisahkan oleh titik. Header menyebutkan algoritma penandatanganan yang dipakai, payload membawa claim (siapa penggunanya, kapan token kedaluwarsa, apa yang boleh dilakukan), dan signature memungkinkan server membuktikan bahwa token tidak diubah.

Yang akan kamu pelajari saat men-decode JWT

  • JWT punya tiga bagian yang di-encode dengan Base64URL dan dipisahkan oleh titik: header.payload.signature.
  • Claim umum seperti sub, role, iat, nbf, dan exp menggambarkan identitas, izin, waktu terbit, dan waktu kedaluwarsa.
  • Payload yang sudah di-decode bisa diedit oleh siapa saja. Hanya signature yang memungkinkan server mendeteksi perubahan.
  • Algoritmanya berbeda-beda: HS256 memakai secret bersama, sedangkan RS256 dan ES256 memakai pasangan kunci publik/privat. Field alg di header memberi tahu mana yang dipakai.

Cara men-decode JWT langkah demi langkah

  1. Tempel token lengkapnya

    Tempel JWT ke kotak input. Bentuknya seharusnya seperti xxxx.yyyy.zzzz, yaitu tiga bagian yang di-encode dengan Base64URL dan digabung dengan titik.

  2. Baca header-nya

    Header memberi tahu algoritma penandatanganan (alg) dan tipe token. Waspadai "alg": "none", karena artinya token itu tidak ditandatangani dan tidak bisa dipercaya.

  3. Baca claim di payload

    Payload adalah JSON yang berisi semua claim. Cari sub (id pengguna), exp (kedaluwarsa), iat (waktu terbit), dan claim kustom apa pun yang ditambahkan aplikasimu seperti role atau tenant.

  4. Cek kedaluwarsanya

    Ubah Unix timestamp dari exp menjadi tanggal. Kalau sudah lewat, token itu kedaluwarsa dan API yang berperilaku baik akan menolaknya.

  5. Verifikasi signature (opsional)

    Kalau kamu punya secret atau kunci publiknya, tempel ke verifier untuk memastikan signature-nya valid. Isi token hanya bisa dipercaya kalau signature-nya lolos pengecekan.

Claim standar JWT

Ini adalah claim terdaftar yang didefinisikan oleh spesifikasi JWT (RFC 7519). Aplikasi apa pun bisa menambahkan claim kustomnya sendiri di sampingnya.

ClaimNamaArti
issIssuer (penerbit)Siapa yang membuat dan menandatangani token
subSubject (subjek)Tentang siapa token itu, biasanya id pengguna
audAudience (penerima)Untuk siapa token itu ditujukan
expExpiration (kedaluwarsa)Unix timestamp yang setelahnya token tidak valid
nbfNot Before (tidak sebelum)Token tidak boleh diterima sebelum waktu ini
iatIssued At (waktu terbit)Kapan token dibuat
jtiJWT IDIdentifier unik, berguna untuk pencabutan token
algAlgorithm (header)Algoritma penandatanganan: HS256, RS256, ES256, …

Contoh JWT untuk dicoba

Periksa JWT yang umum

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsInJvbGUiOiJzdHVkZW50IiwiZXhwIjoxNzEwMDAwMDAwfQ.Q3hH8yzqI2OsHJ1Lyj8jJfJPa5ZpIVlh1FhJpJbqMcs

Header
{  "alg": "HS256",  "typ": "JWT"}
Payload
{  "sub": "user_123",  "role": "student",  "exp": 1710000000}

Header-nya menyebutkan HS256 (algoritma dengan secret bersama). Payload-nya mengidentifikasi pengguna, role-nya, dan kapan token kedaluwarsa. Signature adalah bagian ketiga. (Ini contoh token untuk demonstrasi, jadi signature-nya tidak akan lolos verifikasi dengan secret sungguhan mana pun.)

Cek apakah token sudah kedaluwarsa

Claim payload
{  "exp": 1710000000}

exp adalah Unix timestamp dalam detik. Ubah menjadi tanggal: kalau sudah lewat, token itu kedaluwarsa dan backend yang benar akan menolaknya.

Kenali algoritma "none" yang berbahaya

Header
{  "alg": "none",  "typ": "JWT"}

Kalau server menerima "alg": "none", penyerang bisa memalsukan payload apa pun tanpa signature. Selalu tolak header ini di production.

Kesalahan umum soal JWT

  • Menaruh password, secret, atau data pribadi yang sensitif di payload. JWT bisa dibaca, tidak dienkripsi.
  • Men-decode token lalu menganggapnya valid tanpa mengecek signature-nya.
  • Mengira Base64URL yang bisa dibaca itu sama dengan enkripsi. Payload JWT memang sengaja dibuat mudah dibaca.
  • Menyimpan JWT di localStorage tanpa memikirkan dampak XSS, lalu memberinya masa berlaku yang sangat panjang.
  • Tidak memvalidasi claim aud (audience). Token yang diterbitkan untuk satu layanan bisa dipakai ulang di layanan lain kalau penerimanya tidak mengecek.

FAQ JWT

Apa itu JWT?

JWT adalah singkatan dari JSON Web Token. JWT adalah format token yang ringkas, ditandatangani, dan aman untuk URL, yang dipakai untuk membawa claim antara dua pihak, paling sering antara server dan browser untuk merepresentasikan pengguna yang sudah masuk.

Bagaimana cara men-decode JWT?

Tempel token ke JWT decoder, atau pecah di titik-titiknya dan decode Base64URL pada masing-masing dari dua bagian pertama. Header dan payload kembali sebagai JSON, sedangkan bagian ketiga adalah signature.

Bagaimana cara mengecek apakah JWT sudah kedaluwarsa?
Lihat claim exp di payload. Nilainya adalah Unix timestamp dalam detik. Kalau waktu sekarang sudah melewati exp, token itu kedaluwarsa.
Bisakah siapa pun men-decode JWT?

Bisa. Header dan payload di-encode dengan Base64URL, tidak dienkripsi. Signature hanya membuktikan bahwa token belum diutak-atik, bukan menyembunyikan isinya.

Apa arti verifikasi JWT?

Verifikasi menghitung ulang signature memakai secret atau kunci publik yang diharapkan, lalu membandingkannya dengan signature di token. Kalau cocok, payload-nya bisa dipercaya dan tidak diubah.

Haruskah aku menyimpan password di JWT?

Tidak. Siapa pun yang memegang token bisa membaca payload-nya. Simpan hanya identifier dan claim yang tidak sensitif, dan andalkan masa berlaku yang pendek plus refresh token untuk keamanan.

Pelajari lebih lanjut

Alat developer lainnya

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai