Apa itu JSON Web Token?
Sebuah JSON Web Token (JWT) adalah pembungkus ringkas dan aman-URL untuk payload klaim kecil. Ini adalah format kredensial standar untuk sesi web stateless, token ID OAuth/OIDC, autentikasi API mesin-ke-mesin, dan magic link yang ditandatangani. Sebuah JWT selalu berupa tiga segmen base64url yang digabungkan dengan titik: header.payload.signature. Header dan payload berupa JSON; tanda tangannya adalah MAC biner atau tanda tangan digital pada dua segmen pertama.
Bagaimana JWT bekerja?
Saat alat ini mendekode sebuah token, ia menelusuri jalur tiga langkah yang sama yang diikuti setiap pustaka JWT:
- Pisahkan token pada titik menjadi tepat tiga segmen non-kosong. Bentuk lain apa pun dianggap rusak.
- Dekode base64url segmen 0 dan 1, lalu
JSON.parsemasing-masing. Header membawa algoritma (alg) dan jenis token (typ). Payload membawa klaim (sub,exp,iat, kunci kustom). - Jika rahasia disediakan, hitung ulang MAC pada
<segment0>.<segment1>menggunakan algoritma di header. Bandingkan byte-nya dengan segmen ketiga. - Tampilkan hasil verifikasi bersama klaim yang didekode, termasuk indikator kedaluwarsa yang dapat dibaca manusia yang dihitung dari klaim
exp.
Mengapa mendekode JWT di peramban?
Menempelkan JWT yang nyata dan sedang digunakan ke debugger jarak jauh membocorkan kredensial tersebut ke log layanan itu, tumpukan observabilitasnya, dan mitra mana pun yang menerima data dari layanan tersebut. Bahkan ketika situs pihak ketiga mengklaim tidak mencatat token, Anda tidak punya cara untuk memverifikasinya. Alat ini dibangun agar Anda tidak perlu membuat kompromi semacam itu:
- Nol jaringan: runtime tidak memiliki panggilan
fetch,XMLHttpRequest, atausendBeacon. Buka DevTools saat Anda mendekode dan memverifikasi — panel Jaringan tetap senyap. - Web Crypto bawaan: verifikasi HMAC menggunakan
crypto.subtle.importKeydancrypto.subtle.sign, primitif yang sama yang akan dipanggil runtime Anda. - Deploy statis: setiap halaman adalah satu file HTML statis tanpa endpoint server yang bisa dikompromikan. Tidak ada token untuk dibocorkan karena tidak ada server untuk membocorkannya.
Apa yang diverifikasi alat ini, dan apa yang tidak?
Versi 1 alat ini hanya memverifikasi tanda tangan keluarga HMAC-SHA. Secara konkret:
- Didukung: HS256, HS384, HS512. Berikan rahasia bersama dan alat akan menghitung ulang serta membandingkan MAC.
- Belum didukung: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA, dan PS256/384/512 (RSA-PSS). Ini memerlukan kunci publik dalam bentuk PEM atau JWK dan sengaja ditunda ke rilis selanjutnya.
- Ditolak:
alg: "none". Alat ini mendekode token tetapi secara eksplisit menandainya sebagai tidak aman — tidak ada validasi tanda tangan yang terjadi, dan sistem produksi mana pun yang menerima token semacam itu memiliki kerentanan serius.
Seperti apa contoh pendekodean JWT?
Tempel token contoh kanonik RFC 7519 ke kolom masukan di atas:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header didekode menjadi {"alg":"HS256","typ":"JWT"} dan payload menjadi {"sub":"1234567890","name":"John Doe","iat":1516239022}. Masukkan your-256-bit-secret di panel verifikasi dan pemeriksaan tanda tangan akan mengembalikan valid. Ubah satu karakter saja dari rahasia tersebut dan ia akan mengembalikan tidak valid. Tidak ada satu pun dari ini yang meninggalkan browser Anda.
Inilah pendekode JWT yang kami harap ada saat kami perlu men-debug token di produksi: menghormati privasi, cepat, dan dibangun di atas primitif yang sama dengan yang digunakan runtime.