🎫
← Kembali ke Panduan

Struktur Token JWT Dijelaskan: Header, Payload, dan Signature

· Tag: jwt-structure, jwt-header, jwt-payload, jwt-signature, json-web-token

Struktur Token JWT Dijelaskan

Setiap JSON Web Token (JWT) adalah string yang ringkas dan aman untuk URL yang membawa klaim antara dua pihak. Memahami struktur internalnya sangat penting bagi setiap developer yang bekerja dengan keamanan berbasis token.

Tiga Bagian JWT

Sebuah JWT terdiri dari tiga bagian yang dipisahkan oleh titik (.):

header.payload.signature

Contoh:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Setiap bagian adalah JSON yang di-encode dengan base64url. JWT ditandatangani, bukan dienkripsi — siapa pun dapat mendekode dan membaca isinya.

Bagian 1: Header

Header berisi metadata tentang token — algoritma penandatanganan dan tipe token.

| Field | Deskripsi | Contoh Nilai | |-------|-----------|--------------| | alg | Algoritma penandatanganan (wajib) | HS256, RS256, ES256 | | typ | Tipe token (opsional) | JWT | | kid | Key ID (opsional) | "key-1" |

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

Field alg memberi tahu verifier algoritma mana yang membuat signature. Ketidakcocokan algoritma — atau menerima alg: "none" — adalah kerentanan keamanan JWT yang umum.

Bagian 2: Payload

Payload berisi klaim tentang pengguna dan metadata. Klaim terbagi dalam tiga kategori:

Klaim Terdaftar (Registered Claims)

| Klaim | Nama Lengkap | Tujuan | |-------|-------------|--------| | iss | Issuer | Siapa yang menerbitkan token | | sub | Subject | Mengidentifikasi pengguna | | aud | Audience | Penerima yang dituju | | exp | Expiration | Timestamp kedaluwarsa token | | nbf | Not Before | Token tidak valid sebelum waktu ini | | iat | Issued At | Timestamp pembuatan token | | jti | JWT ID | Pengidentifikasi token unik |

Contoh Payload yang Didekode

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622,
  "iss": "https://auth.example.com"
}

Klaim publik didefinisikan dalam registri IANA atau menggunakan URI yang tahan benturan. Klaim privat adalah klaim khusus yang disepakati antara issuer dan consumer.

Bagian 3: Signature

Signature dibuat dengan menggabungkan header yang di-encode, payload yang di-encode, dan kunci rahasia menggunakan algoritma dari header. Signature memiliki dua tujuan:

  1. Integritas — memastikan token tidak dimodifikasi setelah ditandatangani.
  2. Autentikasi — membuktikan token ditandatangani oleh pihak yang diharapkan.

Pembuatan Signature HS256

HMACSHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  secret
)

Pembuatan Signature RS256

RSASHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  privateKey
)

Base64url vs Base64 Standar

| Aspek | Base64 Standar | Base64url | |-------|---------------|-----------| | Karakter 62 | + | - | | Karakter 63 | / | _ | | Padding | = | Dihilangkan |

Encoding ini memastikan JWT aman untuk header HTTP, parameter query, dan path URL tanpa percent-encoding.

Proses Pembuatan JWT Lengkap

  1. Buat header JSON dan base64url-encode.
  2. Buat payload JSON dan base64url-encode.
  3. Gabungkan dengan pemisah ..
  4. Tandatangani dengan algoritma dan kunci yang dipilih.
  5. Base64url-encode signature.
  6. Gabungkan ketiga bagian dengan pemisah ..

Pertimbangan Keamanan

  • Jangan pernah menyimpan kunci rahasia di payload. Payload di-encode, bukan dienkripsi.
  • Selalu validasi signature. Tanpa verifikasi, siapa pun dapat memalsukan token.
  • Periksa header alg. Tolak alg: "none" dan upaya downgrade algoritma.
  • Tetapkan waktu kedaluwarsa yang singkat. Gunakan klaim exp dalam hitungan menit atau jam, bukan bulan.

Dekode Token JWT Secara Online

Gunakan alat JWT decoder untuk memeriksa token apa pun. Tempelkan dan langsung lihat header, payload, dan algoritma penandatanganan yang didekode. Semua pemrosesan terjadi di browser Anda.

Struktur Token JWT Dijelaskan: Header, Payload, dan Signature - CoolTool