TL;DR: Gunakan alat JWT Decoder online gratis untuk decode dan inspeksi isi payload JSON Web Token secara instan, aman, dan 100% client-side di browser. Tanpa pernah mengirimkan token atau secret key ke server.
Berikut alur mudah menggunakan alat dekode JWT:
.).
Dalam arsitektur aplikasi modern berbasis REST API dan Microservices, **JSON Web Token (JWT)** adalah standar industri terbuka (RFC 7519) yang digunakan untuk mentransmisikan klaim identitas otentikasi secara aman antar dua pihak. Namun, karena string JWT dienkode dalam format *Base64URL*, manusia tidak dapat membaca isinya secara langsung tanpa alat pengurai.
JWT adalah objek JSON ringkas yang ditandatangani secara digital (menggunakan algoritma HMAC seperti HS256 atau kunci publik/privat RSA/ECDSA). Karena ditandatangani, data di dalam token dijamin keasliannya dan tidak dapat diubah oleh pihak ketiga tanpa merusak tanda tangan digital (*signature*).
Penting untuk dipahami bahwa **mendekode JWT tidak sama dengan mengendalikan enkripsi**. Bagian *header* dan *payload* pada JWT hanya di-encode (bukan dienkripsi/disandi) sehingga siapapun yang memegang token tersebut dapat membaca isinya. Oleh karena itu, pengonversi kami melakukan proses dekode 100% *Client-Side* di peramban Anda untuk memastikan kredensial token Anda tidak pernah tersimpan di server manapun.
Header.Payload.Signature. Dekode dilakukan dengan mengubah encoding Base64URL menjadi teks mentah JSON.Berikut adalah penjelasan teknis pembagian 3 bagian utama pada string JWT:
Memuat metadata teknis token seperti algoritma kriptografi yang digunakan (contoh: HS256) dan tipe token (JWT).
Memuat klaim data pengguna (*claims*) seperti User ID, peran (*role*), dan waktu kedaluwarsa token (*exp*).
Hasil hash enkripsi kombinasi Header + Payload menggunakan Secret Key untuk memastikan token tidak dimanipulasi.
Peramban memisahkan token berdasarkan tanda titik (.), mengambil segmen pertama (Header) dan segmen kedua (Payload), lalu mengganti karakter khusus Base64URL (seperti `-` menjadi `+` dan `_` menjadi `/`) sebelum mengeksekusi fungsi `atob()` dan `JSON.parse()` untuk merender objek JSON asli.
iss, sub, dan exp untuk interoperabilitas otentikasi.Berikut adalah daftar tabel rujukan klaim terdaftar (*Registered Claims*) standar yang sering ditemukan pada JWT Payload:
| Klaim (Key) | Nama Lengkap | Penjelasan & Tipe Data |
|---|---|---|
| iss | Issuer | Entitas penyedia/penerbit token (contoh: https://auth.infokoding.com). |
| sub | Subject | Subjek atau ID unik milik pengguna (contoh: usr_1029384). |
| aud | Audience | Penerima yang dituju oleh token (contoh: https://api.infokoding.com). |
| exp | Expiration Time | Waktu kedaluwarsa token dalam format Unix Timestamp numerik. |
| nbf | Not Before | Waktu paling awal token mulai berlaku (sebelum waktu ini token ditolak). |
| iat | Issued At | Waktu pembuatan/penerbitan token dalam format Unix Timestamp. |
| jti | JWT ID | Pengenal unik untuk token JWT (digunakan mencegah serangan Replay). |
Selain *Registered Claims* standar di atas, pengembang dapat menyisipkan *Custom Claims* berupa **Public Claims** (klaim kustom publik yang terdaftar di IANA) atau **Private Claims** (klaim internal antar aplikasi seperti "role": "admin" atau "permissions": ["read", "write"]).
Berikut adalah blok kode solusi siap pakai untuk dekode JWT di berbagai bahasa:
Fungsi dekode payload JWT tanpa pustaka eksternal menggunakan JavaScript murni:
function parseJwtPayload(token) {
try {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload);
} catch (e) {
return null;
}
}
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";
console.log(parseJwtPayload(token));
Menggunakan modul jwt (PyJWT) atau modul bawaan base64:
import jwt
import json
import base64
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
# Opsi 1: Menggunakan PyJWT (Tanpa Verifikasi Signature)
payload = jwt.decode(token, options={"verify_signature": False})
print(payload)
# Opsi 2: Menggunakan modul Base64 murni
payload_b64 = token.split('.')[1] + '=='
decoded_bytes = base64.urlsafe_b64decode(payload_b64)
payload_json = json.loads(decoded_bytes.decode('utf-8'))
print(payload_json)
Mendekode bagian payload JWT menggunakan fungsi bawaan base64_decode():
<?php
function decodeJwtPayload($token) {
$parts = explode('.', $token);
if (count($parts) !== 3) {
return null;
}
$payloadB64 = strtr($parts[1], '-_', '+/');
$payloadJson = base64_decode($payloadB64);
return json_decode($payloadJson, true);
}
$token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";
$payload = decodeJwtPayload($token);
print_r($payload);
?>
Tidak. Bagian Header dan Payload JWT di-encode menggunakan Base64URL yang dapat didekode secara bebas tanpa memerlukan Secret Key. Namun, memasukkan Secret Key memungkinkan verifikasi keaslian tanda tangan (*signature*) secara Client-Side.
Sangat aman. Seluruh proses dekode dan verifikasi JWT dieksekusi 100% langsung di peramban Anda menggunakan JavaScript murni (Client-Side). Token dan Secret Key Anda tidak pernah dikirimkan atau disimpan di server kami.
Sebuah token JWT yang valid harus memiliki tepat 2 tanda titik yang memisahkan Header, Payload, dan Signature. Jika token terpotong, memiliki karakter ilegal, atau tidak berformat Base64URL yang benar, proses dekode akan gagal.
JWT bersifat *stateless* (seluruh data klaim pengguna tersimpan di dalam token itu sendiri), sedangkan Session Cookie bersifat *stateful* di mana server harus menyimpan dan mencocokkan Session ID di database/Redis.