Decode JWT
Lihat header, klaim, dan masa berlaku JSON Web Token. Token adalah kredensial yang masih berlaku, jadi tidak ada apa pun di sini yang dikirim ke mana pun atau disimpan, kapan pun.
- Tidak pernah disimpan
- Tanpa antre, tanpa menunggu
- Tanpa daftar, tanpa watermark
Token Anda tidak pernah meninggalkan halaman ini. Token di-decode di sini, tanpa permintaan ke server mana pun — dan itu penting, karena JWT biasanya adalah kredensial yang masih berlaku. Matikan Wi-Fi setelah halaman dimuat, dan token tetap ter-decode: tidak ada yang dikirim.
Awalan “Bearer ” tidak masalah — akan diabaikan.
Cara kerjanya
Tempel tokennya
Dengan atau tanpa awalan "Bearer ". Token tetap di halaman ini; tidak ada permintaan yang dikirim.
Baca ketiga bagiannya
Header, payload, dan signature, masing-masing di-decode dan diformat. Timestamp diubah menjadi tanggal sungguhan dan Anda diberi tahu berapa lama waktu yang tersisa.
Periksa peringatannya
Token kedaluwarsa, tidak ada masa berlaku, algoritma "none", dan masalah lain ditandai beserta artinya.
Apa yang diperiksa, dan apa yang hanya dibaca
Semua yang ada di halaman ini, kecuali dua perbandingan tanggal, hanyalah transkripsi. Header dan payload di-decode dari Base64URL lalu ditampilkan; signature disalin apa adanya dan tidak pernah disentuh, karena tidak ada kunci di sini dan tidak ada kriptografi yang dijalankan sama sekali. Dua penilaian yang dibuat halaman ini adalah perhitungan terhadap jam perangkat Anda sendiri — klaim masa berlaku dibandingkan dengan waktu sekarang, dan klaim not-before dibandingkan dengan waktu sekarang. Tidak ada toleransi untuk selisih jam, padahal server yang memeriksa token yang sama biasanya memberi toleransi satu atau dua menit. Laptop yang jamnya lima menit terlalu cepat akan menampilkan token yang masih berlaku sebagai kedaluwarsa, padahal token itu baik-baik saja.
Dua detail penguraian menentukan apa yang sebenarnya Anda lihat. Klaim waktu dibaca hanya jika datang sebagai angka JSON: token yang masa berlakunya ditulis sebagai string "1699999999" dianggap tidak punya masa berlaku sama sekali, dan mendapat peringatan bahwa token itu tidak pernah kedaluwarsa dengan sendirinya — kebalikan dari kenyataannya. Dan payload diurai dengan parser JSON bawaan browser, bukan parser yang mempertahankan digit di balik alat JSON kami, jadi klaim numerik 64-bit seperti ID pengguna snowflake di subject ditampilkan dengan digit terakhirnya dibulatkan. Karena alasan inilah identifier di JWT biasanya berupa string; jika tidak, baca dari payload mentahnya, bukan dari tabel klaim.
Token dengan lima bagian ditolak sebagai JWE terenkripsi, dan penilaian itu dibuat hanya berdasarkan jumlah bagiannya, tanpa membaca header — benar dalam praktiknya, dan perlu diketahui bahwa itu jalan pintas. Apa pun yang tidak terdiri dari tiga bagian langsung ditolak, begitu pula payload yang ter-decode menjadi array JSON atau string biasa, bukan object. Peringatan dimunculkan untuk algoritma "none" dan untuk keluarga HS, yang kunci penandatangannya berupa secret bersama, bukan public key. Token yang ditandatangani dengan RS, ES, atau PS tidak memunculkan peringatan apa pun, jadi diamnya halaman ini berarti tidak ada bentuk buruk yang dikenal, bukan persetujuan.
Jika Anda butuh hal lain
Tidak ada yang disimpan di sini, dan hanya karena itulah halaman ini layak ada — tetapi ini tetap bukan kebiasaan yang patut dibangun. Klaim privasi tidak bisa diperiksa dengan membacanya: putuskan koneksi setelah halaman dimuat dan lihat decoder tetap bekerja, sesuatu yang tidak mungkin dilakukan alat yang bergantung pada server. Dan jika token yang Anda tempel di tempat yang tidak bisa Anda audit masih berlaku, rotasi token itu alih-alih menimbang-nimbangnya. Rotasi hanya butuh satu menit. Alternatifnya adalah perdebatan panjang dengan diri sendiri tentang kredensial yang masih bisa membuka pintu. Untuk membaca token di komputer alih-alih di tab browser, payload-nya cukup satu baris shell: ambil field kedua yang dipisahkan titik dengan cut, jalankan base64 -d, lalu salurkan ke jq.
Jika pertanyaannya adalah apakah token itu asli, bukan apa isinya, halaman ini memang bukan tempatnya, begitu pula setiap decoder online lainnya. Verifikasi dilakukan di tempat kuncinya sudah berada — library JWT di bahasa pemrograman Anda sendiri, di server Anda, diperiksa terhadap JWKS yang dipublikasikan penerbitnya. Itu hanya beberapa baris kode, itulah satu-satunya jawaban yang bermakna, dan situs mana pun yang menawarkan untuk melakukannya bagi Anda sedang meminta satu-satunya rahasia yang tidak boleh Anda berikan kepada situs web.
Pertanyaan yang sering diajukan
Apakah token saya dikirim ke suatu tempat?
Tidak — dan untuk halaman ini, itulah intinya, bukan sekadar fitur. JWT biasanya adalah kredensial yang masih berlaku: siapa pun yang memegangnya bisa bertindak sebagai Anda sampai token itu kedaluwarsa. Menempelkannya ke decoder online yang mengirimkannya ke server sama dengan menyerahkan kunci yang masih berfungsi, dan tidak ada janji tentang tidak mencatat log yang bisa membatalkannya. Decoder ini hanyalah JavaScript biasa di halaman yang sedang Anda lihat. Tidak ada yang disimpan, tidak ada yang dicatat, tidak ada permintaan yang dikirim. Setelah halaman dimuat, matikan Wi-Fi Anda dan alat ini tetap bekerja persis sama. Itulah cara paling sederhana untuk membuktikan sendiri klaim privasi ini, alih-alih sekadar memercayai kata-kata kami.
Apakah alat ini memverifikasi signature?
Tidak, dan tidak ada decoder online yang bisa melakukannya dengan jujur tanpa kunci penandatangan Anda. Men-decode dan memverifikasi adalah dua operasi yang sama sekali berbeda. Men-decode hanya membalik Base64 token — siapa pun bisa melakukannya pada token apa pun, dan itu sama sekali tidak membuktikan apakah token tersebut asli. Memverifikasi berarti menghitung ulang signature dengan secret atau public key yang menandatanganinya, dan kunci itu tidak boleh ditempel ke situs web mana pun. Yang Anda lihat di sini adalah apa yang DIKLAIM token. Apakah klaim itu bisa dipercaya adalah pertanyaan yang hanya bisa dijawab oleh server Anda, yang memegang kuncinya.
Bisakah orang lain membaca JWT yang saya kirim kepadanya?
Bisa — sepenuhnya, dan hal ini sering mengejutkan orang. JWT itu ditandatangani, bukan dienkripsi. Header dan payload-nya berupa Base64, yaitu encoding tanpa rahasia apa pun, jadi siapa pun yang mencegat token bisa membaca setiap klaim di dalamnya. Signature mencegah mereka MENGUBAH token; signature sama sekali tidak mencegah mereka MEMBACANYA. Jangan pernah menaruh hal rahasia di payload JWT: tidak ada kata sandi, tidak ada nomor kartu, tidak ada data pribadi yang tidak akan Anda tulis di kartu pos.
Apa arti peringatan algoritma "none"?
Artinya token menyatakan dirinya tidak ditandatangani, dan ini salah satu temuan paling serius yang dilaporkan halaman ini. `alg: none` adalah cara membobol autentikasi yang sudah terdokumentasi: penyerang mengambil token asli, mengubah payload-nya agar menyatakan dirinya administrator, mengatur algoritmanya menjadi "none", menghapus signature-nya, dan library yang memercayai header akan menerimanya. Setiap library JWT yang serius kini memblokir hal ini secara default, tetapi implementasi yang memercayai `alg` masih ada. Token yang datang dengan `alg: none` harus diperlakukan sebagai serangan sampai terbukti sebaliknya.
Bagaimana cara membaca masa berlakunya?
Sudah dilakukan untuk Anda. `exp`, `iat`, dan `nbf` adalah timestamp Unix — detik sejak 1970 — yang tidak bisa dibaca sebagai angka mentah. Masing-masing ditampilkan sebagai tanggal sungguhan di zona waktu Anda, beserta berapa lama yang lalu atau berapa lama lagi, dan token yang kedaluwarsa dinyatakan dengan jelas, bukan dibiarkan untuk Anda hitung sendiri. Token tanpa `exp` sama sekali juga ditandai: JWT yang tidak pernah kedaluwarsa tidak bisa dicabut lewat masa berlaku, dan tetap valid selama kunci penandatangannya masih berlaku.
Token saya punya lima bagian, bukan tiga
Berarti itu JWE — dienkripsi, bukan sekadar ditandatangani — dan isinya memang tidak bisa dibaca tanpa kunci dekripsi. Halaman ini mengenali bentuknya dan memberi tahu Anda, alih-alih menampilkan data tak bermakna. Lima bagian berarti payload-nya adalah ciphertext sungguhan; tidak ada yang bisa di-decode.
Apa saja klaim standarnya?
Klaim yang terdaftar adalah: `iss` siapa yang menerbitkannya, `sub` siapa yang dibicarakan (biasanya ID pengguna), `aud` untuk siapa token itu, `exp` kapan kedaluwarsa, `nbf` tidak berlaku sebelum, `iat` kapan diterbitkan, dan `jti` ID unik untuk token tersebut. Semua klaim lainnya adalah klaim khusus dari siapa pun yang membangun sistemnya. Setiap klaim terdaftar diberi label beserta artinya di hasil, jadi Anda tidak perlu mengingat singkatan tiga huruf mana yang berarti apa.
Perlu diketahui: Alat ini men-decode, bukan memverifikasi. Signature JWT membuktikan bahwa token tidak diubah, dan memeriksanya membutuhkan secret atau public key penerbitnya — yang tidak boleh Anda tempel ke halaman web. Anggap semua yang ditampilkan di sini sebagai klaim, bukan bukti, dan lakukan verifikasi di server Anda.
Pasang alat ini di situs Anda
Gratis untuk blog, halaman kelas, atau artikel bantuan apa pun. Tempel satu potong kode dan pengunjung Anda bisa langsung memakainya di halaman Anda.
Alat Developer lainnya
Decode Base64
Kembalikan Base64 menjadi teks atau file
Formatter JSON
Ubah JSON yang berantakan jadi mudah dibaca
Generator Hash
MD5, SHA-1, SHA-256, SHA-384, dan SHA-512
Encode Base64
Ubah teks atau file menjadi Base64
Generator UUID
v4 untuk rahasia, v7 untuk kunci database
Validator JSON
Temukan persis di mana JSON rusak