Cara menggunakan JWT decoder
- Tempelkan JSON Web Token, yaitu string panjang yang biasanya muncul setelah
Authorization: Bearer. - Header dan payload didekode lalu ditampilkan sebagai JSON yang rapi.
- Klaim waktu seperti
exp,iat, dannbfdiubah menjadi tanggal yang mudah dibaca, jadi Anda bisa langsung melihat apakah token sudah kedaluwarsa.
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.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9didekode 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
| Klaim | Nama | Arti |
|---|---|---|
iss | Issuer (penerbit) | Siapa yang membuat dan menandatangani token. |
sub | Subject (subjek) | Pihak yang menjadi subjek token, biasanya ID pengguna. |
aud | Audience (penerima) | Layanan yang menjadi tujuan token. |
exp | Expiration time (waktu kedaluwarsa) | Unix timestamp; setelah waktu ini, token harus ditolak. |
nbf | Not before (tidak sebelum) | Unix timestamp; sebelum waktu ini, token belum berlaku. |
iat | Issued at (diterbitkan pada) | Unix timestamp saat token dibuat. |
jti | JWT ID | Pengenal 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
expdannbfdi 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