Kembali ke Kumpulan Developer Tools Online InfoKoding

JWT Decoder Online Gratis

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.

Panduan Cara Dekode JSON Web Token Online

Key Takeaways: Gunakan JWT Decoder online gratis untuk membaca data klaim (seperti User ID, Email, Expired Time) dari string JWT secara otomatis tanpa perlu mengunggah kunci rahasia (*secret key*).

Berikut alur mudah menggunakan alat dekode JWT:

  1. Salin string token JWT (terdiri dari 3 bagian yang dipisahkan dua karakter titik .).
  2. Tempelkan string tersebut pada kolom Encoded Token di sebelah kiri.
  3. Sistem secara otomatis mengekstraksi dan mendekode bagian Header (warna merah) serta Payload (warna ungu) secara instan.
  4. Masukkan Secret Key pada kolom verifikasi untuk menguji keabsahan tanda tangan (*Signature*) secara Client-Side.

Apa itu JWT Decoder & Mengapa Penting?

Key Takeaways: JWT Decoder adalah alat pengurai string Base64URL yang memformat kembali payload JSON Web Token agar dapat dibaca oleh pengembang untuk kebutuhan *debugging* otentikasi API.

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.

Definisi JSON Web Token (RFC 7519)

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*).

Keamanan Inspeksi JWT Client-Side

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.

Cara Kerja Dekode JSON Web Token

Key Takeaways: Sebuah token JWT selalu memiliki 3 segmen terpisah oleh tanda titik: Header.Payload.Signature. Dekode dilakukan dengan mengubah encoding Base64URL menjadi teks mentah JSON.

Berikut adalah penjelasan teknis pembagian 3 bagian utama pada string JWT:

Struktur 3 Bagian Utama JWT (Header, Payload, Signature)

1. Header (Merah)

Memuat metadata teknis token seperti algoritma kriptografi yang digunakan (contoh: HS256) dan tipe token (JWT).

2. Payload (Ungu)

Memuat klaim data pengguna (*claims*) seperti User ID, peran (*role*), dan waktu kedaluwarsa token (*exp*).

3. Signature (Biru)

Hasil hash enkripsi kombinasi Header + Payload menggunakan Secret Key untuk memastikan token tidak dimanipulasi.

Proses Dekode Base64URL menjadi JSON

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.

Standard Claims pada JWT Payload

Key Takeaways: Spesifikasi RFC 7519 menyediakan 7 klaim terdaftar (*Registered Claims*) standar seperti 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).

Perbedaan Registered Claims vs Public & Private Claims

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"]).

Contoh Kode Dekode JWT pada Berbagai Bahasa Pemrograman

Key Takeaways: Pelajari contoh implementasi dekode JWT tanpa dependensi eksternal pada JavaScript, Python, dan PHP untuk kebutuhan backend & frontend.

Berikut adalah blok kode solusi siap pakai untuk dekode JWT di berbagai bahasa:

Dekode JWT pada JavaScript (Node.js & Browser)

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));

Dekode JWT pada Python (PyJWT & Base64)

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)

Dekode JWT pada Backend PHP

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);
?>

FAQ: Pertanyaan Umum Seputar JWT Decoder

Apakah JWT Decoder ini membutuhkan Secret Key untuk membaca 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.

Apakah aman menempelkan token JWT sensitif pada alat ini?

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.

Mengapa token JWT saya dinyatakan tidak valid saat di-decode?

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.

Apa perbedaan antara otentikasi JWT dan Session Cookie biasa?

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.

Rusmawan Abdullah Sani
Ditinjau oleh Tim Pengembang InfoKoding Rusmawan Abdullah Sani
Terverifikasi Client-Side Safe