Pilih bahasa

Dekoder JWT: Urai & Analisis Token JSON Web Anda

Urai token JWT Anda secara instan di browser. Lihat header, payload, dan klaim waktu (exp, iat) dalam format yang mudah dibaca. Aman dan privat.

Mehmet Demiray Diterbitkan Diperbarui
Bagikan
Ubah claim exp, iat, dan nbf menjadi tanggal yang mudah dibaca

Membedah Anatomi JWT: Header, Payload, dan Signature

JSON Web Token, atau JWT, sekilas tampak seperti serangkaian karakter acak yang panjang. Namun, di balik kerumitannya, terdapat struktur yang logis dan terdefinisi dengan baik. Setiap JWT terdiri dari tiga bagian utama, yang dipisahkan oleh tanda titik (.):

  1. Header: Bagian pertama ini adalah objek JSON yang berisi metadata tentang token itu sendiri. Umumnya, header memiliki dua properti: alg (algoritma) yang digunakan untuk menandatangani token, seperti HS256 atau RS256, dan typ (tipe) yang hampir selalu bernilai JWT.
  2. Payload: Bagian kedua ini juga merupakan objek JSON dan merupakan inti dari token. Payload berisi "klaim" (claims), yaitu pernyataan tentang suatu entitas (biasanya pengguna) dan data tambahan. Klaim ini bisa berupa informasi standar seperti ID pengguna (sub), waktu kedaluwarsa (exp), atau data kustom seperti peran pengguna (role).
  3. Signature: Bagian terakhir ini adalah tanda tangan digital. Signature dibuat dengan menggabungkan header yang telah di-encode, payload yang di-encode, sebuah kunci rahasia (secret key), lalu menjalankannya melalui algoritma yang ditentukan di header. Tanda tangan ini memastikan bahwa data di dalam token tidak diubah oleh pihak yang tidak berwenang.

Untuk membuat string JWT yang ringkas, bagian header dan payload di-encode menggunakan format Base64Url. Ini bukan enkripsi, melainkan hanya metode representasi data biner dalam format teks. Oleh karena itu, siapa pun dapat mendekode dan membaca isinya. Alat Dekoder JWT kami melakukan persis hal ini: mengambil string JWT, memisahkan header dan payload, lalu mengubahnya dari format Base64Url menjadi JSON yang mudah dibaca dan diformat dengan rapi.

Mengenal Klaim Standar dalam JWT: `iss`, `sub`, `exp`, dan Lainnya

Payload sebuah JWT berisi klaim, yang merupakan potongan-potongan informasi. Ada tiga jenis klaim: terdaftar (registered), publik (public), dan privat (private). Klaim terdaftar adalah serangkaian klaim standar yang direkomendasikan untuk digunakan guna memastikan interoperabilitas. Berikut adalah beberapa klaim terdaftar yang paling umum Anda temui:

iss (Issuer): Mengidentifikasi pihak yang menerbitkan token. Misalnya, https://api.perusahaan-saya.co.id. sub (Subject): Mengidentifikasi subjek dari token, yang biasanya merupakan ID unik dari pengguna. Contohnya, user-12345. aud (Audience): Mengidentifikasi penerima yang dituju dari token tersebut. Sebuah token yang diterbitkan untuk satu layanan (misalnya, https://app.perusahaan-saya.co.id) mungkin tidak akan diterima oleh layanan lain. exp (Expiration Time): Menentukan waktu kedaluwarsa token dalam format Unix Timestamp (jumlah detik sejak 1 Januari 1970). Setelah waktu ini, token tidak lagi valid. Dekoder JWT akan menerjemahkan nilai ini menjadi tanggal dan waktu yang dapat dibaca manusia. nbf (Not Before): Menentukan waktu sebelum token tersebut tidak boleh diterima untuk diproses. Berguna untuk menjadwalkan kapan sebuah token mulai aktif. iat (Issued At): Menentukan waktu saat token diterbitkan. Ini dapat digunakan untuk menentukan umur sebuah token. * jti (JWT ID): Memberikan ID unik untuk token, yang dapat digunakan untuk mencegah token digunakan lebih dari sekali (replay attacks).

Selain klaim standar ini, pengembang sering kali menambahkan klaim privat untuk menyimpan informasi spesifik aplikasi, seperti peran pengguna (roles: ["admin"]) atau tingkat akses.

Dekode vs Verifikasi JWT: Apa Bedanya dan Mengapa Penting?

Dalam dunia JWT, istilah "mendekode" dan "memverifikasi" sering digunakan, tetapi keduanya merujuk pada proses yang sangat berbeda dengan implikasi keamanan yang krusial. Memahami perbedaan ini adalah kunci untuk menggunakan JWT dengan aman.

Mendekode (Decoding) adalah proses membaca isi sebuah JWT. Seperti yang telah dibahas, header dan payload JWT hanya di-encode menggunakan Base64Url, bukan dienkripsi. Artinya, informasi di dalamnya bersifat publik dan dapat dibaca oleh siapa saja yang memiliki token tersebut. Proses dekode hanya mengubah format Base64Url kembali menjadi JSON yang dapat dibaca. Alat Dekoder JWT ini dirancang untuk melakukan tugas ini dengan cepat dan mudah, memungkinkan Anda untuk menginspeksi klaim di dalam token.

Memverifikasi (Verifying), di sisi lain, adalah proses keamanan. Ini adalah tindakan memeriksa keaslian dan integritas token dengan memvalidasi signature-nya. Proses verifikasi memerlukan kunci rahasia (untuk algoritma simetris seperti HS256) atau kunci publik (untuk algoritma asimetris seperti RS256) yang sesuai dengan kunci yang digunakan untuk menandatangani token. Verifikasi memastikan dua hal penting: pertama, bahwa token tersebut benar-benar dikeluarkan oleh pihak yang Anda percayai (yang memiliki kuncinya), dan kedua, bahwa header dan payload tidak diubah sama sekali sejak token diterbitkan.

Singkatnya, mendekode adalah tentang membaca, sementara memverifikasi adalah tentang mempercayai. Anda tidak boleh pernah mempercayai data apa pun dari JWT di sisi server hanya dengan mendekodenya. Verifikasi tanda tangan adalah langkah wajib sebelum memberikan akses atau melakukan tindakan berdasarkan klaim di dalam token.

Mendeteksi Masalah Autentikasi dengan Dekoder JWT

Saat mengembangkan atau memelihara sistem yang menggunakan autentikasi berbasis JWT, berbagai masalah dapat muncul. Alat Dekoder JWT adalah alat bantu debug yang sangat berharga untuk mendiagnosis masalah ini dengan cepat. Berikut adalah beberapa skenario umum di mana dekoder dapat membantu:

  1. Token Kedaluwarsa (401 Unauthorized): Ini adalah masalah yang paling sering terjadi. Pengguna melaporkan bahwa mereka tiba-tiba keluar dari sistem atau menerima pesan error akses ditolak. Dengan menempelkan token ke dekoder, Anda dapat langsung memeriksa klaim exp (Expiration Time). Alat ini akan menampilkannya dalam format waktu yang mudah dibaca, memungkinkan Anda untuk mengonfirmasi apakah token tersebut memang sudah kedaluwarsa. Mungkin masa berlaku token diatur terlalu singkat.
  1. Klaim yang Salah atau Hilang: Pengguna tidak dapat mengakses fitur tertentu yang seharusnya menjadi haknya. Dekode token mereka dan periksa klaim kustom seperti peran (roles), izin (permissions), atau grup (groups). Anda mungkin menemukan bahwa token yang dihasilkan untuk pengguna tersebut tidak menyertakan klaim yang benar, misalnya, tidak ada peran admin.
  1. Kesalahan Konfigurasi Issuer atau Audience: Setelah melakukan deployment atau perubahan konfigurasi, autentikasi tiba-tiba gagal. Periksa klaim iss (Issuer) dan aud (Audience) di dalam token. Sering kali, server API dikonfigurasi untuk hanya menerima token dari issuer tertentu dan untuk audience yang spesifik. Ketidakcocokan sekecil apa pun akan menyebabkan token ditolak.
  1. Masalah Perbedaan Waktu (Clock Skew): Token ditolak meskipun tampaknya masih valid. Ini bisa terjadi jika jam pada server yang menerbitkan token (iat) dan server yang memvalidasi token tidak sinkron. Dengan memeriksa klaim iat (Issued At) dan nbf (Not Before), Anda dapat melihat apakah token tersebut dianggap "berasal dari masa depan" atau belum valid menurut jam server validasi.

Pertanyaan Umum (FAQ) Seputar Dekoder JWT

Apakah mendekode JWT sama dengan memverifikasinya? Tidak, keduanya sangat berbeda. Mendekode adalah proses membaca konten header dan payload yang bersifat publik. Siapa pun dapat melakukannya. Memverifikasi adalah proses kriptografis untuk memeriksa keaslian tanda tangan (signature) menggunakan kunci rahasia untuk memastikan token tidak dipalsukan atau diubah. Alat ini hanya melakukan dekode, bukan verifikasi.

Bagaimana cara memeriksa kapan token saya kedaluwarsa? Sangat mudah. Salin seluruh string JWT Anda dan tempelkan ke kolom input pada alat Dekoder JWT. Alat akan secara otomatis mem-parse token dan menampilkan isinya. Cari klaim exp di bagian payload. Di sebelahnya, Anda akan melihat terjemahan waktu kedaluwarsa dalam format tanggal dan waktu lokal yang mudah dipahami.

Apakah aman menempelkan token produksi di sini? Ya, sepenuhnya aman. Alat Dekoder JWT ini beroperasi 100% di sisi klien, artinya semua proses dekode terjadi langsung di dalam peramban (browser) web Anda. Token yang Anda tempelkan tidak pernah dikirim melalui internet ke server kami atau pihak ketiga mana pun. Kerahasiaan data Anda tetap terjaga di komputer Anda sendiri.

Mengapa token saya gagal didekode? Ada beberapa alasan umum mengapa sebuah token mungkin gagal didekode: Format Tidak Valid: String yang Anda masukkan bukanlah JWT yang valid. JWT harus memiliki tiga bagian (header, payload, signature) yang dipisahkan oleh dua tanda titik (.). Encoding Base64Url Rusak: Salah satu dari dua bagian pertama token mungkin bukan string Base64Url yang valid. Ini bisa terjadi jika token tidak disalin sepenuhnya atau rusak saat transmisi. * Bukan JWT, melainkan JWE: Token tersebut mungkin adalah JWE (JSON Web Encryption), di mana payload-nya dienkripsi, bukan hanya di-encode. JWE tidak dapat dibaca tanpa kunci dekripsi privat dan tidak dapat diproses oleh dekoder ini.

Yang paling sering kami jawab.

Apa bedanya men-decode JWT dengan memverifikasinya?

Men-decode dan memverifikasi adalah dua proses yang sangat berbeda. Men-decode hanya mengubah format token dari Base64url menjadi JSON yang bisa dibaca manusia untuk melihat isinya (header dan payload). Siapa pun bisa melakukannya. Sebaliknya, memverifikasi adalah proses memeriksa keaslian tanda tangan (signature) menggunakan sebuah kunci rahasia (secret key) untuk memastikan token tersebut sah dan datanya tidak diubah. Dekoder JWT ini hanya melakukan decode, bukan verifikasi.

Apakah aman menempelkan token JWT dari server production ke alat ini?

Ya, sangat aman. Dekoder JWT kami beroperasi sepenuhnya di sisi klien (client-side), yang berarti semua proses decoding terjadi langsung di dalam browser Anda. Token yang Anda masukkan tidak pernah dikirim atau disimpan di server kami. Data Anda tetap sepenuhnya rahasia dan hanya Anda yang bisa melihatnya.

Bagaimana cara saya mengetahui kapan sebuah token akan kedaluwarsa?

Cukup tempelkan token JWT lengkap Anda ke dalam kolom input. Alat kami akan secara otomatis membaca bagian payload dan mencari klaim exp (Expiration Time). Nilai timestamp UNIX yang ada di sana akan langsung kami konversi menjadi format tanggal dan waktu yang mudah Anda pahami, sesuai dengan zona waktu lokal perangkat Anda.

Kenapa token JWT saya tidak bisa di-decode?

Kegagalan decode biasanya disebabkan oleh beberapa hal: token tidak lengkap karena salah salin, format JWT tidak valid (harus ada tiga bagian yang dipisahkan dua titik), atau salah satu bagiannya bukan merupakan string Base64url yang benar. Pastikan Anda menyalin seluruh string token tanpa ada karakter yang hilang atau tambahan spasi di awal atau akhir.

Kenapa isi JWT terlihat seperti teks acak?

JWT terlihat acak karena bagian Header dan Payload-nya adalah data JSON yang di-encode menggunakan format Base64url. Proses ini mengubah data menjadi teks yang aman untuk ditransmisikan melalui internet, misalnya dalam URL atau header HTTP. Untuk membacanya, Anda perlu mengembalikannya ke format JSON asli menggunakan alat seperti dekoder Base64 atau langsung pakai Dekoder JWT ini.

Apa arti dari `exp`, `iat`, dan `sub` yang sering muncul di payload?

Itu adalah nama-nama klaim standar (standard claims) dalam JWT yang memiliki makna khusus. exp (Expiration Time) adalah waktu kedaluwarsa token. iat (Issued At) adalah kapan token tersebut dibuat. sub (Subject) biasanya adalah identitas pengguna, seperti ID pengguna. Memahami klaim-klaim ini sangat membantu saat melakukan debugging masalah otentikasi atau otorisasi.