Cara menggunakan
- Tempel token lengkap: tiga bagian Base64URL yang dipisahkan titik.
- Baca header dan payload hasil dekode. Klaim exp, iat, dan nbf ditampilkan sebagai tanggal, disertai peringatan jika token sudah kedaluwarsa atau belum berlaku.
- Untuk memverifikasi tanda tangan, masukkan kunci rahasia bersama untuk HS256, HS384, atau HS512, atau tempel kunci publik PEM untuk algoritma RS, PS, atau ES.
- 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 kalikidyang 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
| Klaim | Nama | Arti |
|---|---|---|
iss | Penerbit (issuer) | Pihak yang membuat dan menandatangani token |
sub | Subjek (subject) | Pihak yang menjadi subjek token, biasanya ID pengguna |
aud | Audiens (audience) | Layanan yang menjadi tujuan token |
exp | Waktu kedaluwarsa | Setelah waktu ini, token harus ditolak |
nbf | Berlaku mulai | Sebelum waktu ini, token harus ditolak |
iat | Waktu terbit | Waktu token dibuat |
jti | ID JWT | Pengenal 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, danaudpada 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?
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.