Utilia

JWT Generator dan Verifikator

Buat dan verifikasi JSON Web Token dengan HS256, RS256, PS256, ES256, atau EdDSA. Edit klaim, atur exp dan iat, dan cek signature di browser Anda.

Kunci dan token adalah rahasia. Semuanya ditandatangani dan diverifikasi secara lokal dengan Web Crypto API browser Anda: tidak ada yang diunggah.

Buat JWT bertanda tangan

Klaim waktu:

Verifikasi JWT

Cara membuat JWT bertanda tangan

  1. Pilih Algoritme: HS256/384/512 (secret bersama), RS256/384/512 atau PS256/384/512 (RSA), ES256/384/512 (ECDSA pada P-256, P-384, atau P-521), atau EdDSA (Ed25519, jika browser Anda mendukungnya).
  2. Edit Header (JSON) dan Payload (klaim JSON). Kolom alg selalu mengikuti algoritme yang dipilih, dan typ secara default bernilai JWT.
  3. Gunakan tombol klaim waktu untuk menambahkan tanggal: iat = sekarang, nbf = sekarang, atau pilih jeda seperti “1 jam lagi” lalu klik Atur exp. Nilainya berupa NumericDate: jumlah detik sejak 1 Januari 1970 UTC.
  4. Masukkan Secret (untuk algoritme HS, sebagai teks atau Base64/Base64url melalui Format secret) atau Kunci privat (PEM atau JWK). Belum punya kunci? Klik Buat kunci uji.
  5. Klik Tandatangani token, lalu Salin hasilnya atau klik Verifikasi token ini untuk langsung memeriksanya.

Cara memverifikasi JWT

  1. Tempel token di kolom Token yang diverifikasi.
  2. Pilih Algoritme yang diharapkan. Jika dibiarkan pada “Dari header token”, alat ini menerima apa pun yang tertulis di header, kecuali none. Jika Anda memilih algoritme tertentu, alat ini menolak token yang ditandatangani dengan cara lain, seperti yang seharusnya dilakukan server sungguhan.
  3. Masukkan secret, atau Kunci publik (PEM atau JWK): blok PEM PUBLIC KEY, RSA PUBLIC KEY, atau CERTIFICATE, sebuah JWK, atau JWK Set (kunci yang kid-nya cocok dengan header akan dipakai).
  4. Jika perlu, atur Toleransi jam (detik) agar selisih jam yang kecil tetap diterima, lalu klik Verifikasi token.

Hasilnya menyatakan apakah signature valid, lalu memeriksa exp (kedaluwarsa) dan nbf (tidak berlaku sebelum) terhadap waktu saat ini di komputer Anda. Token dengan signature yang benar tetapi waktu kedaluwarsanya sudah lewat dilaporkan sebagai kedaluwarsa, bukan sebagai valid.

Kunci dan format

Untuk penandatanganan, alat ini menerima blok PKCS#8 PRIVATE KEY, blok PKCS#1 RSA PRIVATE KEY dan SEC1 EC PRIVATE KEY (dikonversi ke PKCS#8 secara internal), serta JWK privat. Kunci yang dilindungi kata sandi harus diekspor terlebih dahulu tanpa kata sandi. Buat kunci uji membuat secret acak seukuran hash untuk algoritme HS, pasangan kunci RSA 2048 bit untuk RS dan PS, kurva yang sesuai untuk ES, atau pasangan Ed25519. Anda mendapatkan kunci dalam format PEM dan JWK, dan kunci tersebut langsung diisikan di kedua sisi sehingga uji bolak-balik bisa langsung dilakukan.

Signature mengikuti RFC 7515 dan RFC 7518: RSA-PSS memakai salt sepanjang hash, dan signature ECDSA berupa gabungan mentah r||s. Implementasinya mereproduksi contoh HS256 dari RFC 7515, Lampiran A.1.

Catatan keamanan

  • Semuanya berjalan di browser Anda dengan Web Crypto API. Token maupun kunci tidak dikirim ke mana pun, tetapi tetap utamakan kunci uji daripada secret produksi.
  • alg: none tidak pernah ditandatangani dan tidak pernah diterima.
  • Secret HMAC sebaiknya minimal sepanjang hash (32 byte untuk HS256). Secret yang lebih pendek memunculkan peringatan.
  • Signature membuktikan integritas dan asal token, bukan bahwa klaimnya sesuai: server juga harus memeriksa iss, aud, dan scope.

Pertanyaan yang sering diajukan

Apa bedanya HS256 dan RS256?

HS256 memakai satu secret bersama untuk menandatangani sekaligus memverifikasi, sehingga setiap verifikator juga bisa memalsukan token. RS256 (serta PS256, ES256, dan EdDSA) menandatangani dengan kunci privat dan memverifikasi dengan kunci publik yang aman untuk dipublikasikan.

Mengapa signature yang valid tetap menampilkan kesalahan?

Karena token berada di luar masa berlakunya: exp sudah lewat atau nbf masih di masa depan. Pemeriksaan signature dan pemeriksaan waktu dilaporkan secara terpisah.

Mengapa alg “none” ditolak?

Token tanpa tanda tangan bisa dibuat oleh siapa saja. Menerimanya adalah celah keamanan klasik pada pustaka JWT, sehingga alat ini menolaknya baik saat menandatangani maupun saat memverifikasi.

Bisakah saya memakai kunci RSA atau EC milik saya sendiri?

Bisa. Tempel kunci privat sebagai PEM atau JWK untuk menandatangani, dan kunci publik untuk memverifikasi. Alat ini memeriksa apakah jenis kunci dan kurvanya cocok dengan algoritme yang dipilih.

Mengapa EdDSA dinonaktifkan?

Browser Anda belum mendukung Ed25519 di Web Crypto. Versi terbaru Chrome, Edge, Firefox, dan Safari sudah mendukungnya.