Decoder JWT

Tempel JSON Web Token untuk melihat header dan payload-nya sebagai JSON yang terformat, waktu exp, iat, dan nbf sebagai tanggal, serta apakah token sudah kedaluwarsa. Tanda tangan dapat diverifikasi secara lokal dengan kunci rahasia atau kunci publik.

Header

Payload

Klaim

Tanda tangan

Verifikasi tanda tangan

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Tempel token lengkap: tiga bagian Base64URL yang dipisahkan titik.
  2. Baca header dan payload hasil dekode. Klaim exp, iat, dan nbf ditampilkan sebagai tanggal, disertai peringatan jika token sudah kedaluwarsa atau belum berlaku.
  3. Untuk memverifikasi tanda tangan, masukkan kunci rahasia bersama untuk HS256, HS384, atau HS512, atau tempel kunci publik PEM untuk algoritma RS, PS, atau ES.
  4. Pastikan klaim penerbit, audiens, dan subjek sesuai dengan yang diharapkan aplikasi Anda.

Struktur sebuah JWT

JSON Web Token (RFC 7519) terdiri dari tiga bagian yang dipisahkan titik: header.payload.signature. Header dan payload adalah objek JSON yang dienkode sebagai Base64URL tanpa padding, itulah sebabnya token hampir selalu diawali eyJ, bentuk terenkode dari pembuka {". Tanda tangan dihitung atas dua bagian pertama persis seperti yang tertulis di token.

  • Header: algoritma penandatanganan di alg, biasanya "typ": "JWT", dan sering kali kid yang menyebutkan kunci yang dipakai.
  • Payload: klaim-klaim, misalnya siapa penggunanya, siapa yang menerbitkan token, dan kapan token kedaluwarsa.
  • Tanda tangan: tanda tangan HMAC, RSA, atau ECDSA yang membuktikan bahwa header dan payload tidak diubah.

Token dengan lima bagian adalah JWE terenkripsi; isinya tidak dapat dibaca tanpa kunci dekripsi.

Klaim terdaftar

KlaimNamaArti
issPenerbit (issuer)Pihak yang membuat dan menandatangani token
subSubjek (subject)Pihak yang menjadi subjek token, biasanya ID pengguna
audAudiens (audience)Layanan yang menjadi tujuan token
expWaktu kedaluwarsaSetelah waktu ini, token harus ditolak
nbfBerlaku mulaiSebelum waktu ini, token harus ditolak
iatWaktu terbitWaktu token dibuat
jtiID JWTPengenal unik, dipakai untuk mendeteksi serangan replay

Waktu berupa nilai NumericDate: jumlah detik sejak 1 Januari 1970 UTC, bukan milidetik. Decoder menampilkannya sebagai tanggal yang mudah dibaca dan membandingkannya dengan jam perangkat Anda.

Mendekode tidak sama dengan memverifikasi

Siapa pun dapat mendekode JWT, karena payload hanya dienkode, bukan dienkripsi; jangan pernah menaruh kata sandi atau rahasia lain di dalamnya. Kepercayaan hanya didapat dari pemeriksaan tanda tangan dengan kunci yang benar, dan server yang menerima token juga harus:

  • hanya mengizinkan algoritma yang diharapkannya dan menolak "alg": "none", yang menandai token tanpa tanda tangan;
  • tidak pernah membiarkan header token memilih antara HMAC dan RSA, karena penyerang dapat menandatangani token palsu dengan kunci publik Anda yang dipakai sebagai rahasia HMAC;
  • memeriksa exp, nbf, iss, dan aud pada setiap permintaan.

Verifikasi opsional di halaman ini menggunakan Web Crypto API yang tersedia di browser Anda. Dekode dan verifikasi berlangsung di perangkat Anda dan tidak ada yang diunggah. Sebagai aturan umum, jangan pernah menempelkan kunci penandatanganan produksi atau token aktif ke situs web yang tidak Anda percayai.

Pertanyaan yang sering diajukan

Apakah aman menempelkan JWT ke decoder ini?

Token didekode dan diverifikasi oleh JavaScript di browser Anda dan tidak pernah dikirim ke server. Perlu diingat bahwa token yang belum kedaluwarsa berfungsi seperti kata sandi bagi siapa pun yang memegangnya, jadi sebaiknya gunakan token uji atau token yang sudah kedaluwarsa saat membagikan tangkapan layar atau log.

Bisakah saya mendekode JWT tanpa kunci rahasia?

Bisa. Header dan payload hanyalah JSON yang dienkode Base64URL, sehingga dapat dibaca tanpa kunci apa pun. Kunci rahasia atau kunci publik hanya diperlukan untuk memverifikasi tanda tangan.

Mengapa decoder menyatakan token saya sudah kedaluwarsa?
Klaim exp pada token berisi waktu yang sudah lewat menurut jam perangkat Anda. Jika token seharusnya masih berlaku, periksa jam sistem Anda dan masa berlaku token yang dikonfigurasi oleh penerbit.
Algoritma tanda tangan apa saja yang dapat diverifikasi?

HS256, HS384, dan HS512 dengan kunci rahasia bersama, serta RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, dan ES512 dengan kunci publik dalam format PEM.

Apa arti "alg": "none"?

Nilai ini menandai JWT tanpa pengamanan dengan tanda tangan kosong, sebagaimana didefinisikan dalam RFC 7518. Siapa pun dapat membuat atau mengubah token seperti itu, jadi server yang mengharapkan token bertanda tangan harus selalu menolaknya.