Teknologi

Cara Decode JWT Token dengan Mudah, Lengkap Beserta Contohnya

Sponsored

Kalau kamu lagi belajar membuat REST API, authentication, atau integrasi aplikasi, kemungkinan besar kamu bakal sering ketemu sama istilah JWT Token. Nah, salah satu hal yang paling sering dicari pemula adalah cara decode JWT Token.

Masalahnya, banyak orang mengira JWT itu terenkripsi. Padahal... enggak.

Inilah kesalahan yang dulu juga pernah gua lakukan. Waktu pertama kali melihat token seperti ini:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

 

Gua langsung mikir, "Wah ini pasti data yang sudah dienkripsi."

Ternyata JWT lebih mirip seperti surat dalam amplop transparan. Semua orang bisa membaca isi suratnya. Yang membuatnya aman adalah tanda tangan digital (Signature) sehingga isi surat tidak bisa diubah sembarangan.

Makanya, memahami cara decode JWT Token merupakan kemampuan dasar yang wajib dimiliki kalau kamu ingin menjadi backend developer.

Di artikel ini kita akan belajar mulai dari nol. Santai aja. Gua bakal jelaskan satu per satu tanpa istilah yang bikin kepala berasap.

Apa Itu JWT Decode?

JWT Decode adalah proses membaca isi JSON Web Token tanpa melakukan verifikasi tanda tangan (signature).

Artinya, kita hanya melihat informasi yang tersimpan di dalam token.

Biasanya informasi tersebut berupa:

  • User ID
  • Username
  • Email
  • Role
  • Expired Time
  • Issued At
  • Issuer
  • Audience
  • Custom Claim

Perlu diingat...

Decode bukan berarti memverifikasi.

Banyak pemula menganggap kalau token berhasil di-decode berarti token tersebut valid.

Padahal belum tentu.

Decode hanya membaca isi token.

Valid atau tidaknya token tetap harus melalui proses JWT Verify.

Apa Saja Isi JWT Token?

JWT terdiri dari tiga bagian utama.

HEADER.PAYLOAD.SIGNATURE

 

Contohnya:

xxxxx.yyyyy.zzzzz

 

Setiap bagian dipisahkan menggunakan titik (.).

Mari kita bahas satu per satu.

1. Header

Header menyimpan informasi mengenai algoritma yang digunakan.

Contohnya:

 

{  "alg": "HS256",  "typ": "JWT" }

 

Artinya:

  • HS256 digunakan sebagai algoritma signing.
  • Token bertipe JWT.

Sederhana.

Bagian ini biasanya ukurannya kecil.

2. Payload

Nah...

Ini bagian yang paling sering dibuka saat melakukan JWT Decode.

Payload berisi data pengguna.

Misalnya:

 

{  "id":15,  "name":"Wisnu",  "email":"wisnu@email.com",  "role":"admin",  "exp":1785500000 }

 

Di sinilah biasanya developer mengecek:

  • siapa pengguna login
  • role pengguna
  • kapan token expired
  • informasi tambahan lainnya

Karena payload hanya menggunakan Base64URL Encoding, siapa saja bisa membacanya.

Makanya...

Jangan pernah menyimpan password di dalam JWT.

Jangan juga menyimpan:

  • PIN
  • Secret Key
  • Access Database
  • API Key
  • Data sensitif lainnya

JWT bukan tempat menyimpan rahasia.

3. Signature

Bagian terakhir adalah Signature.

Inilah yang menjaga agar isi token tidak bisa dimodifikasi.

Misalnya seseorang mengubah role dari:

user

 

menjadi

admin

 

Signature otomatis menjadi tidak cocok.

Server akan langsung menolak token tersebut.

Jadi walaupun Payload bisa dibaca, bukan berarti orang bisa mengubahnya sesuka hati.

Cara Kerja JWT Decode

Sebenarnya proses decode sangat sederhana.

Alurnya seperti ini.

JWT      │      ▼ Pisahkan berdasarkan titik (.)      │      ▼ Ambil Header & Payload      │      ▼ Decode Base64URL      │      ▼ Tampilkan JSON

 

Jadi sebenarnya tidak ada proses dekripsi.

Yang dilakukan hanyalah mengubah Base64URL menjadi JSON biasa sehingga manusia bisa membacanya.

Kalau dianalogikan...

JWT Decode itu seperti membuka file ZIP yang tidak diberi password. Isinya tetap bisa dilihat. Bedanya, kalau ada orang mengubah isi file tersebut, server akan tahu karena Signature tidak lagi cocok.

Perbedaan Decode JWT dan Verify JWT

Ini bagian yang sering bikin bingung.

Padahal keduanya sangat berbeda.

JWT Decode JWT Verify
Membaca isi token Mengecek keaslian token
Tidak membutuhkan secret key Membutuhkan secret key atau public key
Tidak mengecek Signature Mengecek Signature
Token palsu tetap bisa dibaca Token palsu langsung ditolak
Aman untuk debugging Digunakan saat autentikasi

Kalau disederhanakan...

Decode = Membaca.

Sedangkan...

Verify = Memastikan token asli.

Ibarat KTP.

Kamu bisa membaca nama yang tertulis di KTP siapa pun.

Tetapi polisi tetap harus mengecek apakah KTP tersebut asli atau palsu.

JWT bekerja dengan konsep yang hampir sama.

Kapan Kita Perlu Melakukan JWT Decode?

Decode JWT biasanya dilakukan saat:

  • Debugging aplikasi
  • Mengecek Payload API
  • Melihat informasi user login
  • Mengetahui waktu expired token
  • Analisis masalah autentikasi
  • Belajar struktur JWT
  • Testing REST API

Gua sendiri paling sering decode JWT ketika API tiba-tiba mengembalikan status 401 Unauthorized.

Daripada menebak-nebak penyebabnya, lebih cepat buka payload token lalu lihat apakah token sudah expired atau belum.

Sering kali masalahnya ternyata sesederhana itu.

Apakah JWT Decode Aman?

Jawabannya...

Ya.

Selama kamu hanya membaca isi token.

Yang tidak aman adalah:

  • Membagikan JWT milik pengguna lain.
  • Menyimpan secret key di frontend.
  • Menganggap decode sama dengan verify.
  • Menyimpan data rahasia di Payload.

Ingat satu hal penting.

JWT bisa dibaca siapa saja yang memiliki token tersebut.

Karena itu, simpan hanya data yang memang aman untuk diketahui oleh pemilik token.

Cara Decode JWT Token Menggunakan JWT Decoder Online

Kalau tujuanmu hanya ingin melihat isi token, cara paling cepat tentu menggunakan JWT Decoder Online.

Gua sendiri sering memakai cara ini saat debugging API. Tinggal salin token, tempel, selesai. Beberapa detik kemudian Header dan Payload langsung muncul.

Praktis banget.

Walaupun begitu, tetap hati-hati.

Kalau token yang kamu pegang berasal dari sistem produksi atau berisi data penting, sebaiknya jangan asal menempelkannya ke website pihak ketiga. Untuk kebutuhan internal perusahaan, lebih aman memakai tool yang berjalan secara lokal atau membuat decoder sendiri.

Langkah-Langkah Decode JWT Token

Secara umum langkahnya seperti ini.

  1. Salin JWT Token.
  2. Buka aplikasi atau tool JWT Decoder.
  3. Tempel token pada kolom input.
  4. Header dan Payload akan langsung ditampilkan.
  5. Periksa informasi yang dibutuhkan.

Misalnya token yang kamu miliki seperti ini.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJpZCI6MSwibmFtZSI6Ildpc251Iiwicm9sZSI6ImFkbWluIiwiZXhwIjoxNzg1NTAwMDAwfQ. 2LJkY8gP5oA3...

 

Setelah di-decode, hasil Payload kira-kira menjadi:

 

{    "id": 1,    "name": "Wisnu",    "role": "admin",    "exp": 1785500000 }

 

Sekarang jauh lebih mudah dibaca dibanding deretan karakter acak tadi, kan?

Cara Decode JWT Token Secara Manual

Nah, bagian ini menurut gua yang paling menarik.

Karena setelah paham proses manualnya, kamu bakal mengerti kalau JWT sebenarnya tidak serumit yang dibayangkan.

JWT memiliki tiga bagian.

HEADER.PAYLOAD.SIGNATURE

 

Misalnya seperti ini.

AAAAA.BBBBB.CCCCC

 

Yang perlu kita decode hanya dua bagian pertama.

  • Header
  • Payload

Sedangkan Signature tidak perlu di-decode.

Langkah 1 — Pisahkan Berdasarkan Titik

Misalnya token berikut.

AAA.BBB.CCC

 

Kalau dipisahkan hasilnya menjadi:

AAA BBB CCC

 

Bagian pertama adalah Header.

Bagian kedua adalah Payload.

Bagian ketiga merupakan Signature.

Langkah 2 — Decode Base64URL

Header dan Payload menggunakan format Base64URL Encoding.

Contoh Header.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

 

Setelah di-decode menjadi:

 

{    "alg":"HS256",    "typ":"JWT" }

 

Begitu juga Payload.

eyJpZCI6MSwibmFtZSI6Ildpc251In0

 

Menjadi

 

{    "id":1,    "name":"Wisnu" }

 

Sesimpel itu.

Cara Decode JWT Token Menggunakan JavaScript

Kalau kamu sedang membuat aplikasi frontend atau Node.js, proses decode juga cukup mudah.

Salah satu library yang paling populer adalah jwt-decode.

Install terlebih dahulu.

 

npm install jwt-decode

 

Lalu gunakan seperti berikut.

 

import { jwtDecode } from "jwt-decode"; const token = "JWT_TOKEN"; const payload = jwtDecode(token); console.log(payload);

 

Outputnya misalnya:

 

{  id: 1,  name: "Wisnu",  role: "admin",  exp: 1785500000 }

 

Hanya beberapa baris kode saja.

Tapi ingat...

Library ini tidak memverifikasi Signature.

Ia hanya membaca isi token.

Decode Tanpa Library

Kalau sekadar belajar, kita bahkan bisa decode menggunakan JavaScript bawaan browser.

 

const token = "JWT_TOKEN"; const payload = token.split('.')[1]; const json = JSON.parse(atob(payload)); console.log(json);

 

Namun ada satu catatan.

JWT menggunakan Base64URL, sedangkan fungsi atob() memakai Base64 biasa.

Artinya, pada beberapa token kamu perlu melakukan konversi karakter terlebih dahulu sebelum dipanggil menggunakan atob().

Makanya, untuk aplikasi sungguhan lebih disarankan memakai library yang memang dibuat khusus menangani JWT.

Cara Decode JWT Token Menggunakan PHP

Kalau kamu lebih sering bermain di backend PHP, prosesnya juga tidak sulit.

Misalnya menggunakan package firebase/php-jwt.

Install dulu melalui Composer.

 

composer require firebase/php-jwt

 

Lalu contoh penggunaannya.

 

use Firebase\JWT\JWT; use Firebase\JWT\Key; $decoded = JWT::decode(    $jwt,    new Key($secretKey, 'HS256') ); print_r($decoded);

 

Kalau hanya ingin melihat Payload tanpa verifikasi, kamu juga bisa memisahkan bagian kedua token lalu melakukan Base64URL Decode secara manual.

Walaupun begitu, untuk aplikasi produksi sebaiknya tetap menggunakan library resmi agar proses parsing lebih aman dan minim kesalahan.

Cara Mengecek JWT Sudah Expired atau Belum

Salah satu alasan paling umum melakukan decode adalah mengecek waktu kedaluwarsa token.

Biasanya terdapat claim bernama:

 

{    "exp":1785500000 }

 

Nilai tersebut merupakan Unix Timestamp.

Kalau waktu sekarang sudah melewati angka tersebut, berarti token sudah tidak berlaku lagi.

Misalnya.

exp = 1785500000 Current Time = 1785600000

 

Artinya token sudah expired.

Makanya ketika API mengembalikan error:

401 Unauthorized

 

Jangan langsung panik.

Coba decode token terlebih dahulu.

Sering kali penyebabnya hanyalah karena nilai exp sudah lewat.

Kesalahan yang Sering Dilakukan Pemula

Selama beberapa tahun ngoprek backend, ada beberapa kesalahan yang terus berulang.

Menganggap JWT Terenkripsi

Ini yang paling sering.

JWT bukanlah data yang dienkripsi.

JWT hanya menggunakan Base64URL Encoding sehingga siapa saja yang memiliki token tetap bisa membaca Payload.

Menyimpan Password di Payload

Karena Payload dapat dibaca, jangan pernah menyimpan:

  • Password
  • PIN
  • Secret Key
  • API Key
  • Nomor kartu kredit
  • Informasi sensitif lainnya

Payload hanya cocok untuk informasi yang memang diperlukan aplikasi.

Menganggap Decode Sama Dengan Verify

Ini juga sering terjadi.

Developer berhasil membaca isi token, lalu menganggap token tersebut pasti valid.

Padahal belum tentu.

Token palsu pun tetap bisa di-decode.

Yang memastikan keasliannya adalah proses Verify.

Menaruh Secret Key di Frontend

Kalau secret key sudah bocor ke browser atau aplikasi mobile, keamanan JWT praktis runtuh.

Secret key hanya boleh berada di sisi server.

Jangan pernah mengirimkannya ke client.

Kapan Sebaiknya Decode dan Kapan Verify?

Supaya lebih gampang mengingatnya, coba lihat tabel berikut.

Kondisi Decode Verify
Debugging API
Melihat Payload
Menampilkan informasi user
Login pengguna
Middleware Authentication
Otorisasi API
Validasi token

Kalau tujuanmu hanya ingin tahu isi token, lakukan decode.

Kalau tujuanmu ingin memastikan token benar-benar sah dan belum dimodifikasi, lakukan verify.

Jangan sampai tertukar.

 

FAQ Seputar Cara Decode JWT Token

Apakah JWT Token Bisa Dibaca Semua Orang?

Ya, bisa.

Selama seseorang memiliki JWT Token tersebut, ia dapat melakukan decode dan membaca bagian Header serta Payload.

Yang tidak bisa dilakukan sembarang orang adalah memalsukan Signature tanpa mengetahui secret key atau private key yang digunakan server.

Makanya, jangan pernah menganggap JWT sebagai tempat menyimpan data rahasia.

Apakah Decode JWT Sama Dengan Decrypt?

Bukan.

Ini dua hal yang berbeda.

Decode hanya mengubah data yang sebelumnya menggunakan Base64URL Encoding menjadi format JSON yang mudah dibaca.

Sedangkan decrypt berarti membuka data yang memang sebelumnya telah dienkripsi menggunakan algoritma tertentu.

JWT standar tidak menggunakan proses enkripsi. Jadi, ketika kita melakukan decode, sebenarnya kita hanya "menerjemahkan" format datanya, bukan membongkar sistem keamanan.

Kenapa JWT Menggunakan Base64URL?

Tujuannya sederhana.

JWT dirancang agar mudah dikirim melalui HTTP Header, URL, Cookie, atau berbagai media komunikasi lainnya.

Kalau menggunakan Base64 biasa, ada beberapa karakter seperti +, /, dan = yang kurang ramah untuk URL.

Karena itulah JWT memakai Base64URL, yaitu variasi Base64 yang lebih aman digunakan dalam alamat URL maupun HTTP Header.

Apa Fungsi Claim exp pada JWT?

Claim exp menunjukkan waktu kedaluwarsa token.

Contohnya:

 

{    "exp": 1785500000 }

 

Nilai tersebut berupa Unix Timestamp.

Saat server menerima token, server akan membandingkan waktu sekarang dengan nilai exp.

Kalau waktu sekarang melewati nilai tersebut, token otomatis dianggap tidak valid.

Apa Itu Bearer Token?

Bearer Token adalah token yang dikirim melalui HTTP Header.

Contohnya:

 

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5...

 

Dalam banyak REST API modern, isi Bearer Token tersebut adalah JWT.

Makanya ketika seseorang mengatakan "decode bearer token", yang sebenarnya dilakukan adalah decode JWT Token yang berada di dalam header Authorization.

Kenapa JWT Saya Tidak Bisa Di-decode?

Biasanya penyebabnya salah satu dari berikut ini.

  • Format token tidak lengkap.
  • Token rusak atau terpotong.
  • Header, Payload, dan Signature tidak dipisahkan menggunakan tanda titik (.).
  • Token bukan JWT.
  • Encoding token tidak sesuai standar JWT.

JWT yang valid selalu memiliki format seperti ini.

HEADER.PAYLOAD.SIGNATURE

 

Kalau hanya ada dua bagian atau bahkan satu bagian saja, kemungkinan besar token tersebut memang bukan JWT yang valid.

Apakah Aman Menggunakan JWT Decoder Online?

Jawabannya tergantung kondisi.

Kalau token hanya digunakan untuk latihan atau pengujian lokal, biasanya tidak menjadi masalah.

Namun kalau token berasal dari sistem produksi atau berisi informasi pengguna sungguhan, sebaiknya jangan sembarangan menempelkannya ke layanan pihak ketiga.

Gua sendiri punya kebiasaan sederhana.

Kalau lagi mengerjakan proyek pribadi, kadang pakai decoder online supaya lebih cepat.

Tapi kalau sedang mengerjakan aplikasi kantor atau sistem yang menyimpan data penting, gua lebih memilih melakukan decode secara lokal menggunakan script atau library. Lebih tenang, lebih aman.

Ringkasan Cara Decode JWT Token

Supaya lebih gampang diingat, berikut inti pembahasannya.

  • JWT terdiri dari Header, Payload, dan Signature.
  • Header dan Payload menggunakan Base64URL Encoding.
  • Decode hanya membaca isi token.
  • Verify memastikan token benar-benar asli.
  • Payload dapat dibaca siapa saja yang memiliki token.
  • Jangan menyimpan password atau data sensitif di dalam JWT.
  • Gunakan library resmi saat aplikasi masuk ke lingkungan produksi.
  • Selalu lakukan verify sebelum menerima JWT sebagai identitas pengguna.

Kalau kamu mengingat tujuh poin di atas, sebenarnya kamu sudah memahami sebagian besar konsep dasar JWT.

Penutup

Belajar cara decode JWT Token sebenarnya tidak sesulit yang terlihat. Begitu paham bahwa JWT hanyalah tiga bagian yang dipisahkan oleh tanda titik, semuanya mulai terasa masuk akal. Header menjelaskan algoritma, Payload menyimpan informasi, dan Signature menjaga agar token tidak diubah sembarangan.

Dulu gua juga sempat mengira JWT itu seperti brankas digital yang isinya tidak mungkin dibaca. Setelah memahami cara kerjanya, ternyata analoginya lebih cocok seperti kartu identitas yang bisa dilihat siapa saja, tetapi memiliki tanda keaslian yang sulit dipalsukan. Dari situ, konsep decode dan verify jadi jauh lebih mudah dipahami.

Kalau kamu sedang belajar backend, REST API, Laravel, CodeIgniter, Node.js, atau framework lain yang menggunakan JWT, luangkan waktu untuk benar-benar memahami proses decode. Kemampuan sederhana ini sering kali menghemat banyak waktu saat debugging, mengecek token yang sudah kedaluwarsa, atau mencari penyebab error autentikasi.

Yang paling penting, jangan lupa satu prinsip dasar: decode bukan verify. Kamu boleh membaca isi JWT kapan saja, tetapi server tetap wajib memverifikasi Signature sebelum mempercayai token tersebut. Memahami perbedaan kecil ini akan membantumu membangun aplikasi yang jauh lebih aman dan menghindari kesalahan yang sering dilakukan developer pemula.

Bagikan Artikel Ini

Preview gambar artikel