Lewati ke konten utama
FreeOnlineTools Go
Bahasa Indonesia
Bagaimana caranya

Cara Mendekode JWT dan Memeriksa Klaimnya dengan Aman

Oleh FreeOnlineTools Team · Diperbarui pada tanggal 2026-08-28

Jawaban Cepat

JWT adalah tiga string Base64URL yang digabungkan dengan titik: header.payload.signature. Dekode header dan payload dengan decoding Base64URL untuk memeriksa klaim —tetapi decoding hanya membaca data, tidak memverifikasi keaslian. Selalu verifikasi tanda tangan di server sebelum mempercayai klaim apa pun. Gunakan Dekoder JWT kami untuk memeriksa token di browser Anda.

Perkenalan

Token Web JSON (JWT, RFC 7519) adalah format token aman URL yang ringkas dan digunakan untuk autentikasi dan otorisasi. Ini memiliki tiga bagian berkode Base64URL yang dipisahkan oleh titik: header.payload.signature. Header menjelaskan algoritme, payload membawa klaim (id pengguna, peran, masa berlaku), dan tanda tangan membuktikan bahwa token dikeluarkan oleh pihak tepercaya. Yang terpenting, header dan payload dikodekan, bukan dienkripsi — siapa pun dapat membacanya.

Langkah demi Langkah

  1. Bagi token menjadi tiga bagian

    JWT terlihat seperti xxxxx.yyyyy.zzzzz. Pisahkan karakter titik untuk mendapatkan header (bagian 0), payload (bagian 1), dan tanda tangan (bagian 2). Jika tidak ada tepat tiga bagian, format token salah.

  2. Base64URL-dekode header

    Headernya adalah objek JSON berkode Base64URL seperti {"alg":"HS256","typ":"JWT"}. Base64URL menggunakan - dan _ alih-alih + dan / dan menghilangkan padding. Decode, lalu JSON.parse untuk membaca algoritma dan mengetik. Decoder JWT kami melakukan ini secara otomatis.

  3. Base64URL-decode payload (klaim)

    Payloadnya adalah JSON objek klaim. Klaim terdaftar meliputi iss (penerbit), sub (subjek), aud (audiens), exp (kedaluwarsa), nbf (bukan sebelumnya), iat (dikeluarkan-at), dan jti (token id). Klaim pribadi bersifat khusus untuk aplikasi (misalnya peran, email). Decode dan periksa, tapi jangan percaya sampai diverifikasi.

  4. Periksa masa kadaluwarsa dan klaim yang belum ada sebelumnya

    exp dan nbf adalah cap waktu Unix (detik). Jika waktu saat ini sudah melewati exp, maka token sudah habis masa berlakunya dan harus ditolak. Jika waktu saat ini sebelum nbf, token belum valid. Periksa sisi klien ini untuk UX, tetapi terapkan di sisi server untuk keamanan.

  5. Verifikasi tanda tangan di server (jangan pernah di sisi klien)

    Tanda tangannya adalah HMAC-SHA256(rahasia, header.payload) untuk HS256, atau tanda tangan RSA/ECDSA untuk RS256/ES256. Verifikasi memerlukan kunci rahasia atau publik, yang tidak boleh sampai ke browser. Gunakan perpustakaan seperti jsonwebtoken (Node) atau jose untuk memverifikasi —jangan pernah menulis kripto Anda sendiri.

Contoh

Tipikal JWT (tiga bagian)

Masukan: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpmeJf36POk6yJV_adQssw5c

Keluaran: Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John Doe","iat":1516239022}

Muatan yang didekodekan dengan klaim standar

Masukan: Muatan token autentikasi asli

Keluaran: {"sub":"user-42","iss":"freeonlinetoolsgo.com","exp":1767229200,"iat":1767225600,"role":"admin"}

Deteksi token kedaluwarsa

Masukan: exp: 1609459200 (01-01-2021) diperiksa pada 28-08-2026

Keluaran: Token is expired —current time (1767225600) > exp (1609459200). Reject and prompt re-login.

Masalah Umum

  • Memperlakukan dekode sebagai verifikasi: siapa pun dapat membuat JWT dengan klaim apa pun dan tanda tangan palsu. Decoding membaca payload tetapi tidak membuktikan apa pun. Selalu verifikasi tanda tangan dengan rahasia/kunci publik di server sebelum mempercayai klaim.
  • Menggunakan algoritma 'none': spesifikasi JWT memungkinkan alg: none untuk token yang tidak aman. Jika pemverifikasi Anda menerima alg: none, penyerang dapat memalsukan token. Konfigurasikan perpustakaan Anda agar tidak menolak satu pun dan memasukkan algoritme yang diharapkan ke dalam daftar putih.
  • Menyimpan JWT di Penyimpanan lokal: XSS dapat membaca Penyimpanan lokal dan mengekstrak token. Lebih suka httpOnly, Secure, SameSite=Cookie ketat untuk token sesi, atau token dalam memori yang berumur pendek dengan cookie token penyegaran.
  • Tidak memeriksa exp/aud/iss: token yang dicuri masih berlaku hingga habis masa berlakunya. Selalu periksa exp (kedaluwarsa), aud (audiens yang dituju), dan iss (penerbit) pada setiap permintaan untuk mencegah pemutaran ulang token di seluruh layanan.

Kiat

  • Gunakan token akses yang berumur pendek (15 menit) ditambah token penyegaran yang berumur panjang —ini membatasi jendela jika token akses dicuri.
  • Lebih memilih RS256 (asimetris) daripada HS256 (simetris) ketika beberapa layanan memverifikasi token: setiap layanan mendapatkan kunci publik, dan hanya penerbit yang memiliki kunci pribadi.
  • Gunakan Decoder JWT kami selama pengembangan untuk memeriksa apa yang dikeluarkan server — ini menunjukkan header yang didekodekan, payload, dan ringkasan klaim yang dapat dibaca manusia tanpa mengirimkan token ke mana pun.
  • Jangan pernah memasukkan data sensitif (kata sandi, PII) ke dalam payload JWT — data tersebut dikodekan Base64, tidak dienkripsi, dan siapa pun yang mencegat token dapat membaca setiap klaim.

Alat Terkait

Panduan Terkait

Referensi