Decoder JWT

Masukkan JWT (terdiri dari tiga bagian yang dikodekan menggunakan format base64url dan dipisahkan oleh titik). Dekoder akan menampilkan header, payload, dan signature, yang telah didekode serta dicetak secara rinci, serta algoritma yang terdeteksi, tanggal kedaluwarsa token berdasarkan waktu lokal, serta apakah nilai nbf (not-before), iat (issued-at), dan exp (expiry) konsisten. Verifikasi signature dapat dilakukan secara opsional jika Anda memiliki kunci rahasia atau kunci publik.

Cara mendekode JWT

  1. 1

    Tempel token

    Tiga string base64url yang dipisahkan oleh `.` (header.payload.signature).

  2. 2

    Baca header yang telah didekode

    Algoritma, jenis, dan ID kunci (`kid`). Algoritma menunjukkan jenis kunci yang diperlukan untuk verifikasi.

  3. 3

    Baca payload

    Klaim standar (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) ditambah klaim khusus apa pun yang dikeluarkan oleh aplikasi Anda.

  4. 4

    Verifikasi (opsional)

    Sediakan rahasia HMAC (untuk HS256/384/512) atau kunci publik (untuk RS256, ES256, dll.) untuk memastikan tanda tangan tersebut sah.

Anatomi JWT

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Setiap segmen dikodekan menggunakan format base64url (bukan base64 standar). Bagian header berformat JSON seperti {"alg":"HS256","typ":"JWT"}, payload berformat JSON seperti {"sub":"1234567890","name":"Alice","iat":1600000000}, sedangkan tanda tangan merupakan hasil enkripsi HMAC atau RSA dari header.payload.

Klaim Standar (RFC 7519)

Klaim Nama Catatan
iss Penerbit Pihak yang menerbitkan token
sub Subjek Tentang siapa token tersebut
aud Audiens Untuk siapa token ditujukan
exp Waktu kedaluwarsa Tanda waktu Unix; ditolak setelah waktu ini
nbf Tidak sebelum Tanda waktu Unix; ditolak sebelum waktu ini
iat Diterbitkan pada Tanda waktu Unix saat token dibuat
jti ID JWT Pengenal unik untuk daftar pencabutan

Algoritma yang Didukung

Nilai alg Jenis kunci
HS256/HS384/HS512 Rahasia HMAC bersama
RS256/RS384/RS512 Kunci publik RSA
ES256/ES384 Kunci publik ECDSA
PS256/PS384 Kunci publik RSA-PSS
EdDSA / Ed25519 Kurva Edwards
none Jangan pernah memercayai ini, token tanpa tanda tangan

Jebakan alg: none

Pustaka JWT versi awal mengizinkan token "alg": "none" dan secara naif menerimanya sebagai valid. Selalu:

  • Masukkan algoritma yang diterima aplikasi Anda ke dalam daftar putih.
  • Tolak alg: none tanpa syarat.
  • Tolak alg: HS256 jika kode verifikasi Anda mengharapkan RS256 (serangan “kekeliruan algoritma”).

Apa yang Bukan JWT

  • Tidak dienkripsi. Bagian header dan payload dikodekan dengan base64, yang sangat mudah didekode. Jangan pernah menaruh rahasia dalam JWT tanpa membungkusnya dengan JWE.
  • Tidak dapat dicabut secara default. Setelah diterbitkan, JWT tetap berlaku hingga exp. Untuk pencabutan, Anda memerlukan daftar hitam atau masa berlaku singkat plus token penyegaran.
  • Bukan pengganti cookie sesi untuk setiap kasus penggunaan. Token buram yang disimpan di sisi server sering kali lebih sederhana dan lebih aman.

Kesalahan Umum

  • Memercayai header. Nilai kid dan alg berasal dari token itu sendiri. Server yang disusupi dapat menetapkannya secara sembarangan; selalu validasi terhadap daftar tetap.
  • Mengabaikan selisih nbf dan iat. Pergeseran jam dapat menyebabkan iat > now. Berikan toleransi kecil (30–60 detik).
  • Mencatat seluruh JWT. Payload sering kali berisi ID pengguna, alamat email, dan izin, PII yang seharusnya tidak muncul di stdout.
  • Menggunakan HS256 dengan rahasia yang lemah. Rahasia sepanjang 16 karakter dapat dibobol dengan brute-force dalam hitungan menit. Gunakan setidaknya 256 bit entropi acak.

Pertanyaan yang Sering Diajukan

Tidak. Proses dekoding berjalan di dalam peramban Anda. Token tetap tersimpan secara lokal, ini sangat penting karena JWT umumnya mengandung data sesi, ID pengguna, dan izin akses.

Ya. Jika Anda menempelkan rahasia HMAC yang telah dibagikan atau kunci publik yang dikodekan menggunakan format PEM, proses verifikasi akan dilakukan di peramban Anda. Kunci tersebut tidak pernah keluar dari mesin Anda.

Hal ini berarti token tersebut tidak memiliki tanda tangan (unsigned). Jangan pernah menerima token semacam ini dalam lingkungan produksi, karena dapat dengan mudah dipalsukan. Beberapa kerentanan tingkat tinggi (CVE) secara khusus terkait pustaka yang secara default menerima format alg: none.

Penandatanganan menggunakan JWT membuktikan keaslian data, bukan kerahasiaannya. Bagian header dan payload dikodekan menggunakan format Base64 URL yang dapat dibalikkan. Untuk memastikan kerahasiaan, gunakan metode enkripsi JWE (JSON Web Encryption) pada struktur JWT, atau hindari menyimpan data sensitif dalam payload.

Alat Terkait

Alat ini tersedia dalam bahasa lain