JWT Decoder
Dekode token JWT online dengan dekoder JWT gratis kami. Periksa header, payload, tanda tangan, kedaluwarsa, dan klaim secara instan. 100% browser — token Anda tidak meninggalkan perangkat. Tanpa pendaftaran, tanpa pelacakan.
Apa Itu JWT?
JSON Web Token, atau JWT (dibaca 'jot'), adalah format token ringkas dan URL-safe untuk membawa klaim antara dua pihak. Ia didefinisikan dalam RFC 7519 dan merupakan format kredensial dominan yang dipakai access token OAuth 2.0, ID token OpenID Connect, API key di penyedia auth modern (Auth0, Okta, Clerk, Supabase, Firebase), serta token antar layanan di arsitektur microservice.
"JSON Web Token (JWT) is a compact claims representation format intended for space-constrained environments such as HTTP Authorization headers and URI query parameters." — RFC 7519, Section 1
JWT adalah tiga objek JSON ber-encode Base64URL yang digabungkan dengan titik: header.payload.signature. Header menjelaskan bagaimana token ditandatangani (klaim alg — misalnya HS256 atau RS256 — dan klaim typ, biasanya 'JWT'). Payload membawa klaim: klaim terdaftar seperti iss, sub, aud, exp, iat, ditambah klaim kustom apa pun yang dibutuhkan issuer (role, scope, email, tenant ID). Tanda tangan adalah bukti kriptografis, yang dihitung dari header dan payload dengan secret atau private key issuer, yang memungkinkan penerima mendeteksi manipulasi.
Penting dicatat, JWT di-encode, bukan dienkripsi. Siapa pun yang memegang token bisa membaca payload-nya — mendekodenya hanya butuh parsing Base64URL dan JSON. Jaminan keamanan datang dari tanda tangan: penyerang bisa membaca JWT, tetapi tidak bisa memproduksi JWT berbeda yang lolos verifikasi tanda tangan tanpa signing key. Itulah mengapa JWT aman dikirim lewat jaringan, tetapi tidak aman diisi dengan rahasia.
JWT decoder menunjukkan dengan tepat apa yang dikandung sebuah token — algoritma, klaim, kedaluwarsa — tanpa menyentuh tanda tangan. Ini cara tercepat untuk menjawab 'apakah token ini kedaluwarsa?', 'apa role pengguna ini?', 'issuer mana yang mencetak token ini?', atau 'apakah ini token alg:none yang harus saya tolak?'. Semua decoding di alat ini berjalan secara lokal di browser Anda, sehingga menempel token production aktif pun aman.
Pekerjaan dengan JWT sering berpasangan dengan alat developer lain. Anda mungkin perlu mendekode segmen yang terbungkus Base64URL saat menelusuri token yang rusak, mendekode URL dari header Authorization setelah menangkapnya dari proxy, atau mengonversi klaim exp ke tanggal yang dibaca manusia secara manual. Untuk penjelasan mendalam tentang bagaimana JWT ditandatangani, diverifikasi, dan dirotasi di production, lihat panduan dasar Base64 kami — Base64URL adalah fondasi yang menopang setiap JWT.
// Decode a JWT in the browser — header & payload only
function decodeJwt(token) {
const [h, p, s] = token.split('.');
const pad = (seg) => seg + '==='.slice((seg.length + 3) % 4);
const decode = (seg) => JSON.parse(
atob(pad(seg).replace(/-/g, '+').replace(/_/g, '/'))
);
return { header: decode(h), payload: decode(p), signature: s };
}
const { header, payload } = decodeJwt(token);
console.log(header); // → { alg: 'HS256', typ: 'JWT' }
console.log(payload); // → { sub: 'user_123', exp: 1999999999, ... }
// Expiration check
const expired = payload.exp * 1000 < Date.now(); Fitur Utama
Dekode JWT Secara Instan
Tempel dan lihat JWT didekode secara real-time — header, payload, dan tanda tangan di-parse saat itu juga. Tanpa tombol Decode, tanpa perjalanan bolak-balik ke server.
Deteksi Kedaluwarsa
Otomatis membaca klaim exp dan menampilkan badge merah saat token kedaluwarsa, lengkap dengan tanggal kedaluwarsa persis di zona waktu lokal Anda.
Agnostik Terhadap Algoritma
Mendekode setiap algoritma JWS — HS256/384/512, RS256/384/512, PS256/384/512, ES256/384/512, EdDSA, dan alg:none.
100% Lokal
Decoding berjalan di browser Anda lewat atob dan JSON.parse bawaan. Token Anda tidak pernah diunggah — aman untuk kredensial production.
Tampilan Sadar Klaim
Menyorot klaim terdaftar RFC 7519 (iat, exp, nbf, iss, aud, sub, jti) sehingga Anda bisa menangkap masalah auth sekali pandang.
Salin Sekali Klik
Salin JSON header, JSON payload, atau tanda tangan mentah ke clipboard Anda dengan sekali klik — pas untuk laporan bug dan test.
Contoh
Token HS256 (Valid)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.4NhxPjwoZxPNuxG-2C5ugGxaUsUJ0QyskAz7Ymz5Sg0
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "user_123",
"name": "Alice",
"role": "admin",
"iat": 1715000000,
"exp": 1999999999
} Token yang ditandatangani dengan HMAC-SHA256, berisi subject, role, dan waktu kedaluwarsa di masa depan — konfigurasi JWT paling umum untuk autentikasi sesi.
Token RS256 (Kedaluwarsa)
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS0yMDI1LTAxIn0.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAzNjAwLCJzY29wZSI6InJlYWQ6dXNlciB3cml0ZTpwb3N0In0.signature_placeholder
{
"alg": "RS256",
"typ": "JWT",
"kid": "key-2025-01"
}
{
"iss": "https://auth.example.com",
"aud": "api.example.com",
"sub": "90087165",
"iat": 1600000000,
"exp": 1600003600,
"scope": "read:user write:post"
} Access token bergaya OAuth yang ditandatangani dengan RSA — perhatikan kid (key ID) di header dan klaim exp yang menunjukkan token sudah kedaluwarsa.
ID Token OIDC
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJzdWIiOiIxMTA1MDIyNTExNTU4OTkwNzY2Mzk1IiwiYXpwIjoiY2xpZW50LWlkIiwiYXVkIjoiY2xpZW50LWlkIiwiZW1haWwiOiJhbGljZUBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OSwibm9uY2UiOiJhYmMxMjMifQ.signature
{
"alg": "ES256",
"typ": "JWT"
}
{
"iss": "https://accounts.google.com",
"sub": "110502251155899076639",
"azp": "client-id",
"aud": "client-id",
"email": "alice@example.com",
"email_verified": true,
"iat": 1715000000,
"exp": 1999999999,
"nonce": "abc123"
} ID token OpenID Connect dengan tanda tangan ECDSA, klaim email, dan nonce untuk proteksi terhadap replay attack.
Token Alg: none (Tanpa Tanda Tangan)
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJkZWJ1Zy11c2VyIiwiaWF0IjoxNzE1MDAwMDAwfQ.
{
"alg": "none",
"typ": "JWT"
}
{
"sub": "debug-user",
"iat": 1715000000
} Token tanpa tanda tangan dengan alg:none. Menerima token seperti ini di production adalah kerentanan JWT klasik — selalu tolak alg:none di sisi server.
Cara Menggunakan
- 1
Tempel JWT Anda untuk Didekode
Tempel token lengkap yang akan didekode — termasuk tiga segmen yang dipisahkan titik — ke kotak input. Dekoder berjalan instan di browser Anda; Anda tidak perlu mengklik tombol.
- 2
Baca Header, Payload & Status yang Didekode
Baca algoritma dan tipe token di header yang didekode, klaim di payload yang didekode, serta chip kedaluwarsa / waktu penerbitan di bagian atas. Token kedaluwarsa ditandai warna merah.
- 3
Salin Hasil yang Didekode
Gunakan tombol Salin di setiap panel untuk menyalin JSON header yang didekode, JSON payload yang didekode, atau tanda tangan mentah. Token Anda tidak pernah dikirim ke mana pun — decoding terjadi secara lokal di browser Anda.
Common Errors
Menerima alg:none
JWT tanpa tanda tangan bisa dipalsukan siapa saja. Jangan pernah mengizinkan alg:none di production — selalu berikan daftar algoritma eksplisit ke panggilan verify Anda.
jwt.verify(token, secret) // library default may allow 'none'
jwt.verify(token, secret, { algorithms: ['RS256'] }) Klaim exp Hilang
JWT tanpa exp akan berlaku selamanya. Jika suatu saat token bocor, tidak ada titik pencabutan alami. Selalu setel kedaluwarsa yang sesuai dengan tipe token.
{ "sub": "user_123", "role": "admin" } // no exp { "sub": "user_123", "role": "admin", "exp": 1715003600 } Menyimpan Rahasia di Payload
Payload JWT tidak dienkripsi — siapa pun yang memegang token bisa membacanya. Jangan pernah menaruh password, API key, atau PII utuh di dalam payload JWT.
{ "sub": "user_123", "password": "hunter2" } { "sub": "user_123", "role": "admin" } // payload stays minimal Kasus Penggunaan Umum
- Dekode Token Authorization Bearer
- Dekode token JWT dari header Authorization: Bearer untuk memverifikasi klaim, audience, dan kedaluwarsa yang diterima backend Anda.
- Dekode Token OAuth 2.0 & OIDC
- Dekode access token dan ID token yang dikembalikan server otorisasi (Auth0, Okta, Google, Keycloak) saat integrasi OAuth 2.0 dan OpenID Connect.
- Diagnosis Sesi Kedaluwarsa
- Pastikan dalam satu detik apakah token yang ditolak kedaluwarsa, memakai audience yang salah, atau bermasalah clock skew.
- Pemeriksaan Key Rotation
- Baca kid (key ID) di header untuk memverifikasi bahwa rotasi JWKS Anda menerbitkan token yang ditandatangani dengan key yang diharapkan.
- Security Review
- Tangkap token yang ditandatangani dengan alg:none, tanpa exp, atau membocorkan PII di payload saat code review dan pentest.
- Inspeksi Token Microservice
- Dekode token service-to-service di dalam mesh untuk melihat scope dan subject apa yang diotorisasi panggilan downstream.
Detail Teknis
- Sesuai RFC 7519
- Menangani token JWS yang sesuai RFC 7519 (JWT), RFC 7515 (JWS), dan RFC 7518 (JWA) — semua algoritma terdaftar didukung untuk decoding.
- Decoding Base64URL
- Memakai alfabet Base64 yang URL-safe (- dan _ menggantikan + dan /) seperti didefinisikan di RFC 4648, dengan parsing yang toleran terhadap padding.
- Native Browser, Tanpa Dependensi
- Dibangun di atas atob, TextDecoder, dan JSON.parse bawaan browser — tanpa library eksternal, tanpa panggilan jaringan, tanpa telemetri.
Praktik Terbaik
- Jangan Pernah Percaya Tanpa Verifikasi
- Decoder menampilkan klaim; ia tidak membuktikannya. Selalu verifikasi tanda tangan di sisi server terhadap key issuer sebelum mempercayai klaim apa pun.
- Tolak alg:none di Production
- Konfigurasikan library JWT Anda dengan allowlist algoritma yang eksplisit. Jangan pernah menerima alg:none, dan curigai ketidakcocokan alg pada rotasi key.
- Jaga Payload Tetap Ramping
- Taruh identifier dan klaim berumur pendek di JWT; simpan data besar di balik session ID opaque. Token besar memakan bandwidth di setiap request.
Pertanyaan yang Sering Diajukan
Bagaimana cara mendekode token JWT secara online?
header.payload.signature) — ke dekoder di atas. Proses dekode berlangsung instan di browser Anda: header dan payload didekode dari Base64URL menjadi JSON yang bisa dibaca, dan tanda tangan ditampilkan sebagai string mentah. Baris status memunculkan algoritma tanda tangan, waktu penerbitan, dan kedaluwarsa, sehingga Anda bisa langsung mengenali token yang kedaluwarsa. Untuk mendekode JWT secara manual, pecah token berdasarkan titik, dekode dua segmen pertama dengan Base64URL, lalu parse sebagai JSON — siapa pun yang memegang token bisa membaca klaim-nya karena payload di-encode, bukan dienkripsi. Dekoder ini aman dipakai dengan token production karena tidak ada data yang keluar dari perangkat Anda: tanpa permintaan jaringan, tanpa pencatatan, tanpa pelacakan. Apa itu JWT (JSON Web Token)?
Apakah token saya aman saat menggunakan JWT decoder ini?
Bagaimana cara kerja JWT decoder?
Apakah alat ini bisa memverifikasi tanda tangan JWT?
Apa itu iat, exp, nbf, iss, aud, sub, dan jti?
JWT saya sudah kedaluwarsa — kenapa decoder tetap mendekodenya?
Apa perbedaan JWT, JWS, dan JWE?
Kenapa alg:none berbahaya?
alg:none tidak punya tanda tangan — siapa pun bisa membuatnya, mengaku sebagai pengguna mana saja. Library JWT awal menerima alg:none secara default, sehingga muncul celah autentikasi terkenal: penyerang menghapus tanda tangan, menyetel alg ke none, dan memalsukan token admin. Kini semua library JWT yang matang menolak alg:none kecuali diizinkan secara eksplisit, dan Anda tidak boleh pernah menerimanya untuk request terautentikasi. Decoder ini tetap akan menampilkan token alg:none karena memeriksanya saat debugging itu sah — tetapi perlakukan token seperti itu yang diterima di production sebagai hostile. Algoritma apa saja yang didukung JWT decoder ini?
Sebaiknya simpan JWT di localStorage atau cookie?
Bagaimana cara mendekode JWT di Node.js, Python, atau Go?
jsonwebtoken.decode(token) untuk read-only, jsonwebtoken.verify(token, key) untuk verifikasi. Python: PyJWT.decode(token, options={'verify_signature': False}) untuk membaca, berikan key untuk verifikasi. Go: jwt.ParseUnverified(token, claims) untuk read-only, jwt.Parse(token, keyFunc) untuk verifikasi. Di bahasa apa pun, jangan pernah memverifikasi dengan options={'verify_signature': False} di kode production — itu yang dilakukan alat web ini secara sengaja untuk debugging, dan hanya aman saat Anda memeriksa, bukan mengautentikasi. Berapa ukuran maksimum sebuah JWT?
Saya menempel token dan muncul 'Format JWT tidak valid' — apa masalahnya?
header.payload.signature. Penyebab umum: (1) Anda tidak sengaja hanya menyalin bagian payload, (2) spasi atau baris baru ikut tertempel di tengah, (3) token terpotong saat transit (sering terjadi karena wrapping terminal), (4) token sebenarnya JWE yang formatnya header.encryptedKey.iv.ciphertext.tag (lima bagian), atau (5) token ter-URL-encode dan Anda perlu mendekode URL-nya dulu. Periksa nilai mentah yang dikembalikan API Anda — kebanyakan editor menampilkan karakter tersembunyi saat di-hover. Bisakah saya mendekode JWT tanpa secret key?
JWT saya jalan di Postman tapi ditolak backend — bagaimana cara debugging-nya?
HS256 akan gagal pada library yang dikonfigurasi hanya untuk RS256. (4) kid — jika Anda memakai key rotation, apakah key ID di header ada di JWKS Anda? (5) signature — apakah Anda sudah menempel secret/public key yang benar? Decoder ini menampilkan (1), (2), (3), dan (4) di tampilan header dan payload supaya Anda bisa cepat mengeliminasinya. Alat Terkait
Lihat semua alat →MD5 Hash Generator & Alat Checksum File
Alat Keamanan
Hasilkan hash MD5, SHA-256, SHA-1 & SHA-512 secara online gratis. Hash teks atau file di browser Anda, verifikasi checksum dan salin hasil. Tanpa pendaftaran.
Generator Kata Sandi Acak Online — Kuat, Aman & Gratis
Alat Keamanan
Buat kata sandi acak yang kuat secara instan — gratis, tanpa pendaftaran, 100% di browser. Sesuaikan panjang & karakter, batch hingga 50 dengan analisis entropi.
UUID Generator & Decoder — v1, v4, v5, v7
Alat Keamanan
Generator UUID gratis — buat UUID v1, v4, v5, v7 secara instan. Decode & validasi UUID apa pun. Batch hingga 50. Tanpa pendaftaran, 100% di browser.
Konverter Basis Bilangan — Biner, Hex, Desimal & Oktal
Alat Konversi
Konversi antara biner, hex, desimal, oktal, dan basis apa pun (2-36) secara instan. Presisi BigInt, output siap kode. Gratis, privat — tanpa pendaftaran.
Decode & Encode Base64 Online — Konversi Instan di Browser
Encoding & Pemformatan
Decode dan encode Base64 online gratis. Konversi real-time dengan dukungan UTF-8 dan emoji. 100% privat di browser Anda. Tanpa pendaftaran.
Kompres Gambar Online — JPEG, PNG & WebP
Alat Konversi
Kompres JPEG, PNG & WebP hingga 80% lebih kecil di browser, tanpa upload. Batch 20 gambar, atur kualitas, bandingkan sebelum & sesudah. Gratis & privat.