JWT Decoder

Tempel JSON Web Token untuk melihat header, payload, dan waktu kedaluwarsanya. Decode dilakukan secara lokal; token Anda tidak pernah dikirim ke mana pun.

Berjalan 100% di browser Anda. Apa pun yang Anda tempel tidak diunggah atau disimpan.

Header

Payload

Claim

Signature ditampilkan tetapi tidak diverifikasi: verifikasi memerlukan secret atau public key, yang tidak boleh Anda tempel ke situs web mana pun.

Cara menggunakan JWT decoder

  1. Tempelkan JSON Web Token, yaitu string panjang yang biasanya muncul setelah Authorization: Bearer.
  2. Header dan payload didekode lalu ditampilkan sebagai JSON yang rapi.
  3. Klaim waktu seperti exp, iat, dan nbf diubah menjadi tanggal yang mudah dibaca, jadi Anda bisa langsung melihat apakah token sudah kedaluwarsa.
Privasi: Jangan pernah menempelkan token produksi ke situs yang tidak Anda percayai; token yang valid bisa dipakai ulang oleh siapa saja yang melihatnya sampai token itu kedaluwarsa. Decoder ini berjalan sepenuhnya di browser Anda: token tidak pernah diunggah, dicatat, atau disimpan. Meski begitu, sebaiknya gunakan token uji, dan cabut token apa pun yang Anda curigai telah terekspos.

Anatomi JWT

JSON Web Token, yang dispesifikasikan dalam RFC 7519, adalah cara ringkas untuk mengirimkan klaim antarpihak. Bentuk bertanda tangan yang umum (JWS) terdiri dari tiga bagian yang dipisahkan titik:

header.payload.signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.<signature>
  • Header: JSON yang mendeskripsikan token, terutama algoritma penandatanganannya. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 didekode menjadi {"alg":"HS256","typ":"JWT"}.
  • Payload: JSON yang berisi klaim, yaitu pernyataan tentang pengguna atau sesi.
  • Signature: dihitung dari header dan payload yang sudah dienkode, dengan secret (HMAC, misalnya HS256) atau private key (misalnya RS256, ES256).

Setiap bagian dienkode dengan base64url, yaitu alfabet Base64 yang aman untuk URL tanpa padding. Itulah sebabnya token berisi - dan _, dan mengapa JWT hampir selalu diawali eyJ: begitulah hasil enkode pembuka {" dari sebuah objek JSON jika diikuti nama key huruf kecil yang umum. Anda bisa mencoba enkodenya sendiri dengan Base64 encoder.

Klaim terdaftar

KlaimNamaArti
issIssuer (penerbit)Siapa yang membuat dan menandatangani token.
subSubject (subjek)Pihak yang menjadi subjek token, biasanya ID pengguna.
audAudience (penerima)Layanan yang menjadi tujuan token.
expExpiration time (waktu kedaluwarsa)Unix timestamp; setelah waktu ini, token harus ditolak.
nbfNot before (tidak sebelum)Unix timestamp; sebelum waktu ini, token belum berlaku.
iatIssued at (diterbitkan pada)Unix timestamp saat token dibuat.
jtiJWT IDPengenal unik, berguna untuk mencegah replay.

Semua klaim ini bersifat opsional dalam RFC 7519; aplikasilah yang menentukan mana yang wajib. Klaim waktu dinyatakan dalam detik, bukan milidetik; konverter Unix timestamp menjelaskan perbedaannya.

Kesalahan umum

Mendekode bukan berarti memverifikasi

Siapa pun bisa mendekode JWT; itulah persisnya yang dilakukan alat ini. Mendekode memberi tahu Anda apa yang diklaim token, bukan apakah klaim itu asli. Server harus memverifikasi signature dengan key yang benar serta memeriksa exp, nbf, iss, dan aud sebelum memercayai apa pun di payload.

Payload tidak bersifat rahasia

JWT bertanda tangan bisa dibaca oleh siapa saja yang memegangnya. Jangan masukkan kata sandi, data pribadi yang tidak boleh terlihat oleh klien, atau rahasia internal ke dalam payload. Jika isinya harus rahasia, gunakan JWT terenkripsi (JWE) atau simpan datanya di sisi server.

alg: none dan kebingungan algoritma

Spesifikasi JOSE mendefinisikan nilai "alg": "none" untuk token tanpa pengamanan dengan signature kosong. Library yang mengikuti header milik token itu sendiri bisa saja menerima token palsu seperti ini:

{"alg": "none", "typ": "JWT"}
{"sub": "admin"}
(empty signature)

Serangan serupa mengubah token RS256 menjadi HS256 sehingga public key disalahgunakan sebagai secret HMAC. Pertahanan untuk keduanya sama: atur algoritma yang diizinkan di server dan jangan pernah membiarkan token yang memilih.

Tips

  • Buat access token berumur pendek dan gunakan refresh token untuk sesi yang lebih panjang.
  • Beri toleransi selisih jam yang kecil (misalnya satu menit) saat memeriksa exp dan nbf di beberapa server.
  • Gunakan library JWT yang terawat baik daripada mem-parsing dan memverifikasi token secara manual.

Pertanyaan yang sering diajukan

Bisakah alat ini memverifikasi signature JWT?

Verifikasi memerlukan secret atau public key milik penerbit dan harus dilakukan di backend Anda. Alat ini ditujukan untuk memeriksa header dan klaim token saat debugging.

Mengapa token saya tampil sebagai kedaluwarsa?

Klaim exp lebih awal daripada waktu saat ini di perangkat Anda. Pastikan jam perangkat Anda benar dan penerbit menulis exp dalam satuan detik.

Apakah JWT terenkripsi?

JWT bertanda tangan (JWS), yang merupakan sebagian besar JWT yang dipakai, hanya dienkode dan ditandatangani, sehingga siapa pun bisa membacanya. JWT terenkripsi (JWE) memiliki lima bagian, bukan tiga.

Apakah aman menempelkan token saya di sini?

Pendekodean dilakukan secara lokal dan tidak ada yang dikirim. Sebagai aturan umum, hindari menempelkan token produksi yang masih aktif ke alat online apa pun yang belum Anda tinjau.

Diperbarui

Tersalin ke clipboard