Apa yang Sebenarnya Dilakukan Dekoder JWT
JSON Web Token (JWT) terlihat seperti string karakter acak yang panjang dan tidak transparan, tetapi ia tidak dienkripsi dan bukan sandi rahasia. Ia adalah wadah ringkas yang aman untuk URL yang membawa data terstruktur antara dua pihak. Tempelkan token ke dalam dekoder di atas dan ia memisahkan string tersebut serta menampilkan JSON nyata di dalamnya — metadata, klaim, untuk siapa token tersebut, dan kapan ia kedaluwarsa. Semuanya terjadi langsung di browser Anda. Token tidak pernah diunggah, dicatat, atau dikirim ke mana pun, yang sangat penting ketika hal yang Anda periksa adalah kredensial sesi yang aktif.

Tiga bagian, dua titik
Setiap JWT yang terbentuk dengan baik adalah tiga string yang dienkode dengan Base64url yang digabungkan oleh titik: header.payload.signature. Karakter titik tunggal tersebut adalah cara parser mengetahui di mana satu bagian berakhir dan bagian berikutnya dimulai, dan itulah mengapa token dengan jumlah titik yang salah ditolak sebelum hal lain pun dibaca.
Header adalah objek JSON kecil yang mendeskripsikan token itu sendiri. Hampir selalu berisi typ (tipe, biasanya JWT) dan alg — algoritma penandatanganan, seperti HS256 (HMAC dengan SHA-256) atau RS256 (RSA dengan SHA-256). Header memberi tahu verifikator dengan tepat bagaimana tanda tangan dihasilkan.
Payload adalah bagian yang paling banyak diperhatikan orang. Ini adalah objek JSON lain yang berisi klaim — pernyataan tentang pengguna dan token. Spesifikasi mengelompokkan klaim menjadi terdaftar (nama standar yang dicadangkan), publik, dan privat (nama khusus yang Anda buat sendiri untuk aplikasi Anda). Mendekode payload adalah yang mengungkapkan siapa yang masuk, peran apa yang mereka miliki, dan kapan sesi mereka berakhir.
Tanda tangan adalah segel kriptografi. Ini dihitung atas header dan payload yang dienkode menggunakan algoritma dari header ditambah kunci rahasia atau privat. Karena mencakup kedua bagian lainnya, setiap perubahan pada header atau payload — bahkan satu karakter — membatalkannya.
Klaim yang paling sering Anda temui
Klaim terdaftar adalah nama tiga huruf pendek yang didefinisikan oleh RFC 7519 agar sistem yang berbeda dapat beroperasi bersama. Sejumlah klaim muncul di hampir mana-mana:
iss— issuer: siapa yang membuat token (server auth atau identity provider Anda).sub— subject: principal yang menjadi subjek token, biasanya ID pengguna yang stabil.aud— audience: penerima yang dimaksud oleh token. API harus menolak token yang audiens-nya bukan dirinya sendiri.exp— expiration time: timestamp Unix setelah itu token tidak boleh diterima.iat— issued at: timestamp Unix saat token dibuat.
Anda mungkin juga menemukan nbf (not before) dan jti (ID token unik). Timestamp adalah detik sejak 1970 dalam UTC, itulah mengapa dekoder yang merendernya sebagai tanggal yang dapat dibaca manusia menghemat Anda dari perhitungan mental untuk memeriksa apakah token sudah kedaluwarsa.
Decoding bukan verifikasi — inilah bagian yang mengelabui orang
Perbedaan ini adalah hal terpenting yang perlu dipahami tentang JWT. Decoding berarti membaca isinya: tidak memerlukan kunci dan siapa pun yang memegang token dapat melakukannya, karena Base64url adalah encoding, bukan enkripsi. Verifikasi berarti membuktikan token itu asli dan tidak dimodifikasi — menghitung ulang tanda tangan dengan kunci rahasia atau publik yang benar dan memastikannya cocok.
Alat ini melakukan decoding. Alat ini menunjukkan apa yang dikatakan oleh token, bukan apakah token tersebut dapat dipercaya. Token bisa saja dipalsukan, kedaluwarsa, atau diputar ulang dan tetap terdekode menjadi JSON yang terlihat bersih sempurna. Jangan pernah membuat keputusan otorisasi berdasarkan klaim yang didekode saja. Dalam produksi Anda memverifikasi tanda tangan di sisi server, memeriksa exp, dan mengonfirmasi bahwa iss dan aud sesuai dengan yang Anda harapkan — menggunakan library yang sudah teruji, bukan perbandingan string yang dibuat sendiri.

Payload bukan brankas
Karena payload hanya dienkode dengan Base64url, ia dapat dibaca oleh siapa saja yang mencegat token. Perlakukan semua yang ada di dalamnya sebagai publik. Jangan menempatkan kata sandi, nomor kartu kredit lengkap, kunci rahasia, atau data pribadi sensitif apa pun dalam klaim JWT — jika Anda dapat mendekodenya di sini dalam satu klik, begitu pula orang lain yang mendapatkan salinannya. Tanda tangan melindungi dari modifikasi, bukan dari pembacaan. Jika Anda benar-benar perlu menyembunyikan isi payload, itu adalah tugas JWE (token terenkripsi), spesifikasi yang sama sekali berbeda.
Privasi dan alat terkait
Memeriksa token adalah tindakan sensitif, jadi dekoder ini berjalan sepenuhnya di sisi klien — parsing-nya adalah JavaScript biasa di tab Anda dan tidak ada yang meninggalkan mesin Anda. Menempelkan token sesi ke dalam alat berbasis server berarti menyerahkan kredensial yang masih aktif kepada pihak ketiga, yang tepat adalah apa yang harus Anda hindari. Untuk encoding di balik semuanya, lihat alat Base64 kami, dan jelajahi alat developer kami yang lain untuk utilitas on-device lebih banyak lagi.
Pertanyaan yang sering diajukan
Apakah JWT dienkripsi?
Tidak. JWT standar dienkode dengan Base64url, bukan dienkripsi. Siapa pun yang memiliki token dapat membaca header dan payload. Gunakan JWE jika Anda perlu isinya tersembunyi.
Apakah alat ini memverifikasi tanda tangan?
Tidak. Alat ini hanya mendekode dan menampilkan header serta payload. Memverifikasi tanda tangan memerlukan kunci rahasia atau publik dari issuer dan harus dilakukan di server Anda.
Apakah aman menempelkan token saya di sini?
Ya. Decoding berjalan sepenuhnya di browser Anda menggunakan JavaScript lokal. Token tidak pernah diunggah, disimpan, atau dikirim ke server apa pun.
Apa arti iss, sub, aud, exp, dan iat?
Itu adalah klaim terdaftar: issuer, subject, audience, expiration time, dan issued-at time. Tiga klaim terkait waktu menggunakan timestamp Unix dalam detik.
Bisakah saya mempercayai klaim yang ditampilkan setelah decoding?
Tidak hanya dari decoding saja. Klaim yang didekode bisa berasal dari token yang dipalsukan atau kedaluwarsa. Selalu verifikasi tanda tangan dan periksa kedaluwarsa di sisi server sebelum mempercayainya.
Mengapa token saya memiliki tiga bagian yang dipisahkan oleh titik?
Itulah header, payload, dan tanda tangan, masing-masing dienkode dengan Base64url dan digabungkan oleh titik. Titik-titik memberi tahu parser di mana setiap bagian dimulai dan berakhir.
