Fungsinya
JSON Web Token (JWT, RFC 7519) adalah string ringkas yang aman untuk URL, terdiri dari tiga bagian yang dipisah titik: header yang menyebut algoritma tanda tangan, payload berisi klaim, dan tanda tangan atas dua bagian pertama. API memakai JWT sebagai bearer token, dan penyedia identitas sebagai ID token.
Alat ini membuat dan menandatangani token dari payload JSON. Yang didukung:
- HS256, HS384, HS512: HMAC dengan secret bersama, berupa teks atau Base64.
- RS256, RS384, RS512 dan PS256, PS384, PS512: tanda tangan RSA dengan kunci privat PEM.
- ES256, ES384, ES512: tanda tangan ECDSA dengan kunci privat EC.
Cara menggunakan
- Tulis payload sebagai objek JSON, atau klik Contoh.
- Pilih Algoritma, lalu ketik secret atau tempel kunci privat PEM di bagian atas kotak masukan.
- Bila perlu, setel iat ke sekarang, tambahkan masa berlaku (exp), atau field header tambahan seperti ID kunci.
- Salin token dari keluaran. Tempel ke dekoder JWT untuk memeriksanya.
Contoh
Dengan secret your-256-bit-secret, payload di bawah yang ditandatangani dengan HS256 menghasilkan token contoh terkenal dari jwt.io:
{"sub":"1234567890","name":"John Doe","iat":1516239022}
Header selalu ditulis sebagai {"alg":"HS256","typ":"JWT"} diikuti field tambahan yang Anda masukkan; alg selalu mengikuti algoritma yang dipilih.
Praktik yang baik
Buat token berumur pendek dengan klaim exp, dan setel iss serta aud agar token untuk satu layanan tidak bisa dipakai ulang di layanan lain. Di server, selalu verifikasi tanda tangan dengan daftar algoritma yang diizinkan secara eksplisit dan tolak none. Secret HMAC harus panjang dan acak, minimal sepanjang keluaran hash (32 byte untuk HS256).
FAQ
› Algoritma mana yang sebaiknya dipilih?
Yang diverifikasi server Anda. HS256 memakai secret bersama dan umum di dalam satu sistem. RS256 dan ES256 menandatangani dengan kunci privat dan siapa pun bisa memverifikasi dengan kunci publik, cocok untuk token yang diperiksa banyak layanan. Tanda tangan ES256 jauh lebih pendek daripada RS256.
› Format kunci privat apa saja yang diterima?
Kunci PEM dalam PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 RSA (BEGIN RSA PRIVATE KEY), dan SEC1 EC (BEGIN EC PRIVATE KEY). Kunci terenkripsi harus diekspor dulu tanpa frasa sandi. Untuk ES256, ES384, dan ES512 kunci harus berada pada kurva P-256, P-384, atau P-521.
› Apakah payload JWT rahasia?
Tidak. Header dan payload hanya dikodekan Base64URL, dan siapa pun yang memegang token dapat membacanya. Tanda tangan mencegah perubahan, bukan pembacaan. Jangan pernah menaruh kata sandi atau rahasia lain di payload JWT.
› Apakah secret atau kunci privat saya disimpan atau dikirim?
Tidak. Penandatanganan berjalan di browser Anda dengan Web Crypto API. Secret atau kunci hanya ada di memori halaman ini: tidak disimpan, tidak ditulis ke bilah alamat, dan tidak disertakan dalam tautan berbagi. Meski begitu, hindari menempel kunci produksi di halaman web yang tidak Anda kendalikan.