JWT Decoder
Decode dan periksa JSON Web Token
Token JWT
Apa itu JWT (JSON Web Token)?
JSON Web Token (JWT) adalah format token yang ringkas dan aman untuk URL, didefinisikan dalam RFC 7519. JWT mengkodekan sekumpulan klaim sebagai objek JSON, kemudian menandatanganinya โ dan opsional mengenkripsinya โ sehingga penerima dapat memverifikasi bahwa data tidak dimanipulasi. JWT adalah standar de facto untuk autentikasi tanpa status dalam REST API, sistem single sign-on, dan otorisasi layanan mikro.
Anatomi JWT: Header ยท Payload ยท Signature
Setiap JWT terdiri dari tiga segmen yang dikodekan base64url dan dipisahkan oleh titik. Header dan Payload adalah JSON biasa โ dapat dibaca siapa saja โ sedangkan Signature adalah nilai kriptografis yang hanya dapat diverifikasi menggunakan kunci yang benar.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"alg": "HS256",
"typ": "JWT"
}{
"sub": "user123",
"name": "Alice",
"role": "admin",
"iat": 1717200000,
"exp": 1717203600
}Mengapa Menggunakan Dekoder JWT?
JWT mentah terlihat seperti teks acak. Alat ini langsung menampilkan Header dan Payload sebagai JSON terformat sehingga Anda dapat memeriksa klaim, memeriksa waktu kedaluwarsa, dan mengaudit pilihan algoritma tanpa menulis satu baris kode pun.
Referensi Klaim JWT Standar
RFC 7519 mendefinisikan tujuh nama klaim terdaftar. Ini tidak diwajibkan, tetapi penggunaannya sangat disarankan untuk interoperabilitas. Anda dapat menambahkan klaim khusus apa pun ke Payload.
| Klaim | Deskripsi | Tipe |
|---|---|---|
| iss | Penerbit โ Mengidentifikasi siapa yang menerbitkan token โ misalnya URL server autentikasi atau nama aplikasi Anda. | string |
| sub | Subjek โ Mengidentifikasi prinsipal yang menjadi topik JWT โ biasanya ID pengguna atau akun layanan. | string |
| aud | Audiens โ Mengidentifikasi penerima yang dituju. Pihak penerima harus memverifikasi bahwa ini sesuai dengan identifikatornya. | string | string[] |
| exp | Waktu Kedaluwarsa โ Cap waktu Unix setelahnya token tidak boleh diterima. Selalu tetapkan ini untuk membatasi kerusakan akibat token yang dicuri. | number |
| nbf | Tidak Sebelum โ Cap waktu Unix sebelumnya token tidak boleh diterima. Berguna untuk menjadwalkan token bertanggal masa depan. | number |
| iat | Diterbitkan Pada โ Cap waktu Unix saat token diterbitkan. Digunakan untuk menghitung usia token. | number |
| jti | JWT ID โ Pengenal unik untuk token. Memungkinkan pencabutan dengan menyimpan dan memeriksa nilai JTI yang digunakan di sisi server. | string |
Algoritma Penandatanganan JWT
Klaim header alg menyatakan algoritma mana yang menandatangani token. Pilihan memengaruhi keamanan, kinerja, dan apakah layanan pihak ketiga dapat memverifikasi token tanpa kunci privat.
| Algoritma | Keluarga | Jenis kunci | Catatan |
|---|---|---|---|
| HS256 | HMAC | Symmetric | Paling umum. Rahasia bersama โ siapa pun yang memiliki rahasia dapat menandatangani dan memverifikasi. |
| HS384 | HMAC | Symmetric | Varian HMAC yang lebih kuat; biaya kinerja sedang. |
| HS512 | HMAC | Symmetric | Varian HMAC terkuat. |
| RS256 | RSA | Asymmetric | Algoritma asimetris yang paling banyak digunakan (Google, Auth0, Okta). Kunci publik memverifikasi tanpa kunci privat. |
| RS384 | RSA | Asymmetric | Varian RS dengan keamanan lebih tinggi. |
| RS512 | RSA | Asymmetric | Varian RS terkuat. |
| ES256 | ECDSA | Asymmetric | Kurva eliptik โ tanda tangan lebih pendek dari RSA, populer di perangkat seluler dan IoT. |
| PS256 | RSA-PSS | Asymmetric | RSA-PSS: lebih modern dan aman daripada RS256 berbasis PKCS1v1.5. |
| none | โ | โ | Tanpa tanda tangan โ sangat berbahaya. Jangan pernah menerima token dengan alg: none di produksi. |
Pertimbangan Keamanan
Mendekode JWT selalu aman. Mempercayai JWT tanpa verifikasi tanda tangan yang benar tidak aman. Ingat aturan ini setiap kali Anda menggunakan token dalam aplikasi Anda.
- โMendekode dan memeriksa JWT di alat pengembang atau alat ini
- โMenggunakan exp, iat, dan nbf untuk memahami masa pakai token
- โMencatat klaim Payload untuk debugging (abaikan PII yang sensitif)
- โMembaca header alg untuk memahami bagaimana token ditandatangani
- โMempercayai klaim dalam Payload tanpa memverifikasi tanda tangan di sisi server
- โMenerima token dengan alg: none โ ini berarti tidak ada tanda tangan sama sekali
- โMenyimpan token akses di localStorage pada aplikasi dengan keamanan tinggi (lebih baik gunakan cookie httpOnly)
- โMenetapkan exp jauh di masa depan untuk token yang membawa izin sensitif
Kasus Penggunaan Umum
Mendekode JWT dalam Kode
Header dan Payload dikodekan base64url โ cukup balikkan pengkodeannya. Base64url mengganti + dengan - dan / dengan _, serta menghilangkan padding =. Hanya Signature yang memerlukan kunci rahasia.
function decodeJWT(token) {
const [, payload] = token.split('.')
const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
return JSON.parse(json)
}const [, payload] = token.split('.')
const decoded = JSON.parse(
Buffer.from(payload, 'base64url').toString()
)import base64, json
def decode_jwt(token):
payload = token.split('.')[1]
padding = '=' * (-len(payload) % 4)
return json.loads(base64.urlsafe_b64decode(payload + padding))TOKEN="eyJhbGc..." echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .