Skip to content

JWT Encoder & Generator

Generator & encoder JWT online gratis. Susun header dan payload, tandatangani dengan HS256, RS256, atau ES256 secara instan. 100% di browser — secret dan key Anda tidak pernah meninggalkan perangkat.

Tanpa Pelacakan Berjalan di Browser Gratis
Payload (Klaim)
Sisipkan klaim terdaftar:
Secret
Ditandatangani lokal di browser Anda — secret dan private key Anda tidak pernah meninggalkan perangkat.
Mengikuti perilaku penandatanganan RFC 7515/7518 dengan output diverifikasi-silang terhadap verifier public-key independen — Go Tools Security Team · Jun 11, 2026

Apa Itu JWT Encoder?

JWT encoder menyusun dan menandatangani secara kriptografis sebuah JSON Web Token dari header dan payload berisi klaim. JWT, yang didefinisikan dalam RFC 7519, adalah tiga bagian ber-encode Base64URL yang digabungkan dengan titik: header.payload.signature. Header menamai algoritma penandatanganan; payload membawa klaim (tentang siapa token itu, apa yang bisa dilakukannya, kapan kedaluwarsa); dan tanda tangan adalah bukti kriptografis, yang dihitung dari header dan payload dengan secret atau private key, yang memungkinkan penerima mendeteksi manipulasi.

"JSON Web Token (JWT) is a compact claims representation format intended for space-constrained environments such as HTTP Authorization headers and URI query parameters." — RFC 7519, Section 1

Encoding adalah kebalikan dari decoding. Sebuah JWT decoder membaca klaim token yang sudah ada; sebuah encoder mengambil klaim yang Anda berikan dan menghasilkan token baru yang ditandatangani. Langkah penandatanganan inilah yang membedakan JWT sungguhan dari Base64 sembarangan — tanpa tanda tangan valid, tidak ada verifier yang akan menerima token. Alat ini menandatangani menggunakan Web Crypto API bawaan browser di seluruh keluarga HMAC (HS), RSA (RS, PS), dan ECDSA (ES), jadi seluruh operasi terjadi di perangkat Anda dengan nol dependensi dan nol panggilan jaringan.

Developer menjangkau JWT encoder terus-menerus: untuk mencetak token yang menguji endpoint API terproteksi, untuk mereproduksi bentuk klaim persis yang diterbitkan server OAuth agar sebuah bug bisa didebug, untuk menyusun fixture bagi test integrasi, atau untuk memberi rekan tim Bearer token siap pakai untuk perintah curl. Karena payload di-encode, bukan dienkripsi, JWT aman dikirim lewat jaringan tetapi tidak boleh pernah membawa rahasia — siapa pun yang memegang token bisa membaca setiap klaim, dan hanya tanda tangan yang mencegah mereka mengubahnya.

Pekerjaan JWT berpasangan secara alami dengan alat developer lain. Setelah menandatangani, dekode token untuk memastikan klaimnya, konversi exp dan iat antara waktu Unix dan tanggal manusia, atau hitung hash SHA-256 saat Anda butuh fungsi hash dasar yang menjadi fondasi HMAC pada HS256. Karena setiap segmen JWT di-encode Base64URL, alat Base64 berguna saat Anda memeriksa token secara manual; untuk pembahasan mendalam tentang encoding ini, lihat panduan dasar Base64 kami.

// Sign a JWT in the browser with the Web Crypto API (HS256)
async function encodeJwt(payload, secret) {
  const b64url = (bytes) =>
    btoa(String.fromCharCode(...new Uint8Array(bytes)))
      .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
  const enc = (obj) =>
    b64url(new TextEncoder().encode(JSON.stringify(obj)));

  const header = { alg: 'HS256', typ: 'JWT' };
  const signingInput = `${enc(header)}.${enc(payload)}`;

  const key = await crypto.subtle.importKey(
    'raw', new TextEncoder().encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
  const sig = await crypto.subtle.sign(
    'HMAC', key, new TextEncoder().encode(signingInput));

  return `${signingInput}.${b64url(sig)}`;
}

const token = await encodeJwt({ sub: 'user_123', exp: 1999999999 }, 'my-secret');
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTk5OTk5OTk5OX0....

Fitur Utama

Buat & Tandatangani JWT Secara Instan

Edit payload dan lihat token yang ditandatangani diperbarui real-time — header, payload, dan tanda tangan dihitung saat itu juga. Tanpa tombol Generate, tanpa perjalanan bolak-balik ke server.

Cakupan Algoritma Penuh

Tandatangani dengan HS256/384/512, RS256/384/512, PS256/384/512, dan ES256/384/512 — setiap keluarga JWS umum, semua lewat Web Crypto API bawaan browser.

Key Tidak Pernah Meninggalkan Perangkat

Secret dan private key PKCS8 Anda dipakai sepenuhnya di browser. Tidak ada yang diunggah, dicatat, atau disimpan — aman untuk pengembangan dan penanganan insiden.

Bantuan Klaim Cepat

Sisipkan iss, sub, aud, iat, nbf, atau exp satu jam dengan sekali klik — tanpa timestamp Unix manual, tanpa salah sintaks.

Output Berkode Warna

Token yang ditandatangani dipisah menjadi header, payload, dan tanda tangan dengan warna berbeda, sehingga strukturnya jelas sekali pandang dan mudah disalin.

Nol Dependensi

Dibangun hanya di atas Web Crypto API dan JSON bawaan browser — tanpa library eksternal, tanpa telemetri, tanpa panggilan jaringan jenis apa pun.

Contoh

Token Sesi HS256

{
  "sub": "user_123",
  "name": "Alice",
  "role": "admin",
  "iat": 1715000000,
  "exp": 1999999999
}
secret: a-string-secret-at-least-256-bits-long
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.<HMAC-SHA256 signature>

Token HMAC-SHA256 yang ditandatangani dengan shared secret — konfigurasi paling umum untuk autentikasi sesi stateless. Siapa pun yang memegang secret yang sama bisa memverifikasinya.

Access Token RS256

{
  "iss": "https://auth.example.com",
  "aud": "api.example.com",
  "sub": "90087165",
  "scope": "read:user write:post",
  "iat": 1715000000,
  "exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (PKCS8)
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsInNjb3BlIjoicmVhZDp1c2VyIHdyaXRlOnBvc3QiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<RSA signature>

Access token bergaya OAuth yang ditandatangani RSA. Token ditandatangani dengan private key Anda dan diverifikasi oleh siapa pun yang memegang public key pasangannya — ideal saat verifier tidak boleh bisa mencetak token.

Token Ringkas ES256

{
  "sub": "device-42",
  "iat": 1715000000,
  "exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (P-256)
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZXZpY2UtNDIiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<ECDSA P-256 signature>

Token ECDSA pada kurva P-256. Tanda tangan ES256 jauh lebih pendek daripada RSA sambil menawarkan keamanan setara, sehingga token tetap kecil untuk lingkungan terbatas.

Cara Menggunakan

  1. 1

    Edit Klaim Payload

    Tulis klaim yang dibutuhkan token Anda sebagai JSON di editor payload. Gunakan chip klaim cepat untuk menyisipkan iss, sub, aud, iat, nbf, atau exp satu jam tanpa mengetik timestamp.

  2. 2

    Pilih Algoritma & Masukkan Key

    Pilih algoritma penandatanganan. Untuk HS256/384/512 masukkan secret; untuk algoritma RS, PS, atau ES tempel private key PKCS8 PEM. Token ditandatangani secara lokal saat Anda mengetik.

  3. 3

    Salin JWT yang Ditandatangani

    Token yang ditandatangani muncul instan, diberi kode warna per segmen. Klik Salin untuk mengangkatnya ke header Authorization, perintah curl, atau test. Key Anda tidak pernah meninggalkan browser.

Common Errors

Memakai Secret HMAC Lemah

Keamanan HS256 bergantung sepenuhnya pada entropi secret. Secret pendek atau mudah ditebak memungkinkan penyerang menebaknya secara brute-force dan memalsukan token. Gunakan setidaknya 256 bit keacakan.

✗ Salah
secret: "password123"  // guessable, low entropy
✓ Benar
secret: base64(crypto.randomBytes(32))  // >=256 random bits

Melewatkan Klaim exp

Token tanpa exp tidak pernah kedaluwarsa. Jika bocor, tidak ada titik pencabutan alami. Selalu setel kedaluwarsa yang sesuai dengan tipe token.

✗ Salah
{ "sub": "user_123", "role": "admin" }  // no exp
✓ Benar
{ "sub": "user_123", "role": "admin", "exp": 1715003600 }

Menempel Key PKCS1 Alih-alih PKCS8

Web Crypto API hanya mengimpor private key PKCS8. Key RSA PKCS1 tradisional gagal diimpor — konversi dulu.

✗ Salah
-----BEGIN RSA PRIVATE KEY-----  // PKCS1, not supported
✓ Benar
openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem

Kasus Penggunaan Umum

Buat Token untuk Testing API
Buat Bearer token HS256 dalam hitungan detik untuk menguji endpoint terproteksi dari curl, Postman, atau test integrasi.
Reproduksi Token OAuth & OIDC
Susun token RS256 atau ES256 yang mencerminkan apa yang diterbitkan server otorisasi Anda, sehingga Anda bisa mendebug ketidakcocokan klaim dan audience.
Buat Test Fixture
Hasilkan token deterministik yang ditandatangani untuk unit dan test integrasi tanpa menyiapkan server auth lengkap.
Debug Kegagalan Otorisasi
Buat ulang bentuk token pelanggan — issuer, audience, scope, kedaluwarsa — untuk menemukan kenapa backend menolaknya.
Validasi Verifier
Tandatangani token dengan key yang diketahui untuk memastikan middleware verifikasi Anda menerima token valid dan menolak yang dimanipulasi.
Prototipe Alur Auth
Beri rekan tim token siap pakai sambil merangkai login baru, microservice, atau panggilan antar layanan.

Detail Teknis

Sesuai RFC 7519 / 7515 / 7518
Menghasilkan token JWS yang sesuai RFC 7519 (JWT), RFC 7515 (JWS), dan RFC 7518 (JWA), dengan identifier algoritma terdaftar di header.
Penandatanganan Web Crypto Native
Menandatangani lewat crypto.subtle untuk HMAC, RSASSA-PKCS1-v1_5, RSA-PSS, dan ECDSA. Tanda tangan ECDSA dipancarkan sebagai raw r||s, persis seperti yang dituntut JWS.
Base64URL, Nol Dependensi
Header dan payload di-encode Base64URL dengan alfabet URL-safe (RFC 4648), tanpa padding. Tanpa library eksternal, tanpa panggilan jaringan, tanpa telemetri.

Praktik Terbaik

Selalu Setel Kedaluwarsa
Sertakan klaim exp agar token yang bocor berhenti valid. Masa hidup pendek mengecilkan radius dampak — hitungan menit untuk access token, bukan hari.
Jauhkan Rahasia dari Payload
Payload JWT bisa dibaca siapa pun yang memegang token. Taruh identifier dan scope di dalamnya; jangan pernah password, API key, atau PII utuh.
Tandatangani di Sisi Server di Production
Gunakan alat ini untuk test dan debugging. Di sistem sungguhan, tandatangani token di server dengan library terpelihara dan key dari secrets manager Anda.

Pertanyaan yang Sering Diajukan

Bagaimana cara membuat JWT secara online?
Edit JSON payload di kotak atas, pilih algoritma penandatanganan (HS256 adalah default dan hanya butuh secret), lalu masukkan secret Anda atau tempel private key PKCS8 PEM. Token yang ditandatangani muncul instan, dengan segmen header, payload, dan tanda tangan diberi kode warna sehingga Anda bisa menyalin keseluruhannya dengan sekali klik. Penandatanganan berjalan sepenuhnya di browser Anda menggunakan Web Crypto API bawaan — tidak ada tombol Generate yang perlu ditunggu dan tidak ada request ke server, jadi aman untuk menandatangani token dengan key sungguhan saat pengembangan.
Apa itu generator JWT?
Generator JWT adalah alat yang menyusun dan menandatangani secara kriptografis sebuah JSON Web Token dari header dan payload berisi klaim, menghasilkan string header.payload.signature yang bisa Anda pakai sebagai Bearer token. Ini kebalikan dari JWT decoder: alih-alih membaca token yang sudah ada, generator membuat token baru yang ditandatangani dengan secret Anda (HS256) atau private key (RS256/ES256). Generator ini berjalan sepenuhnya di browser Anda, jadi token diproduksi instan dan signing key Anda tidak pernah meninggalkan perangkat.
Apakah generator JWT ini gratis dan aman dipakai?
Ya — sepenuhnya gratis, tanpa pendaftaran, tanpa iklan, dan tanpa pelacakan. Aman karena semua penandatanganan terjadi lokal di browser Anda lewat Web Crypto API: payload, secret, dan private key Anda tidak pernah diunggah, dicatat, atau disimpan, dan alat ini tidak melakukan permintaan jaringan sama sekali. Itu menjadikannya cocok bahkan saat Anda bekerja dengan key sensitif, meski memakai key test sekali pakai selalu kebiasaan paling aman.
Apakah aman memasukkan secret atau private key saya di sini?
Ya. Penandatanganan terjadi lokal di browser Anda; secret dan private key Anda tidak pernah dikirim ke server, tidak pernah dicatat, tidak pernah disimpan, dan tidak pernah dipakai untuk analitik. Tidak ada cookie dan tidak ada pelacakan. Ini penting karena signing key JWT bisa mencetak kredensial valid — menempelkannya ke alat jarak jauh sama saja menyerahkan kunci sistem auth Anda. Karena semuanya berjalan di sisi klien, encoder ini aman dipakai dengan key production, tetapi Anda tetap sebaiknya memilih key sekali pakai atau key test bila memungkinkan.
Apa perbedaan HS256 dan RS256?
HS256 (HMAC-SHA256) memakai satu shared secret untuk menandatangani sekaligus memverifikasi. Ia sederhana dan cepat, tetapi setiap pihak yang bisa memverifikasi token juga bisa membuatnya, jadi secret harus tetap berada di server tepercaya saja. RS256 (RSA-SHA256) memakai pasangan key: Anda menandatangani dengan private key dan pihak lain memverifikasi dengan public key. Ini memungkinkan Anda menyebarkan public key secara bebas — ke aplikasi klien, layanan mitra, atau endpoint JWKS — tanpa memberi siapa pun kemampuan memalsukan token. Gunakan HS256 untuk sistem simetris bertuan tunggal; gunakan RS256 atau ES256 saat verifier tidak boleh bisa mencetak token.
Algoritma apa saja yang didukung JWT encoder ini?
Ia menandatangani dengan HS256, HS384, HS512 (HMAC dengan shared secret), RS256, RS384, RS512 (RSA PKCS#1 v1.5), PS256, PS384, PS512 (RSA-PSS), serta ES256, ES384, ES512 (ECDSA pada P-256, P-384, dan P-521). Semuanya diproduksi dengan Web Crypto API bawaan browser, jadi tidak ada library pihak ketiga dan tidak ada yang meninggalkan mesin Anda. Algoritma HMAC menerima secret berupa teks atau Base64; keluarga RSA dan ECDSA menerima private key PKCS8 PEM.
Bagaimana cara menyetel klaim exp (kedaluwarsa)?
Tambahkan klaim exp ke payload sebagai timestamp Unix dalam detik — misalnya "exp": 1999999999. Cara tercepat adalah chip exp +1h di bawah payload, yang menyisipkan kedaluwarsa satu jam dari sekarang. Anda juga bisa menambahkan iat (issued-at) dan nbf (not-before) dengan cara yang sama. Ingat bahwa exp dalam detik, bukan milidetik, dan verifier membandingkannya dengan jam mereka sendiri, jadi jaga waktu server tetap sinkron agar tidak terjadi penolakan dini. Untuk mengonversi tanggal manusia ke timestamp Unix, gunakan konverter Unix timestamp kami.
Bagaimana cara mendapatkan private key PKCS8 PEM untuk RS256 atau ES256?
Untuk RSA: openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem. Untuk ECDSA P-256: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ec-private.pem. Kedua perintah menghasilkan blok PKCS8 PEM yang diawali -----BEGIN PRIVATE KEY-----, yang persis seperti yang diharapkan alat ini. Tempel seluruh blok, termasuk baris header dan footer. Public key pasangannya — dipakai untuk memverifikasi token — bisa diturunkan dengan openssl pkey -in private.pem -pubout.
Bagaimana cara memverifikasi token yang baru saya buat?
Tempelkan ke JWT decoder kami untuk memastikan header dan payload terdekode sesuai harapan. Untuk memverifikasi tanda tangan, gunakan server atau SDK Anda dengan key yang benar: jwt.verify(token, secretOrPublicKey, { algorithms: ['HS256'] }) di Node.js, PyJWT.decode(token, key, algorithms=['RS256']) di Python, atau jwt.Parse(token, keyFunc) di Go. Jangan pernah memverifikasi dengan daftar algoritma kosong atau dengan verify_signature=False di production — selalu pin algoritma persis yang Anda harapkan.
Apa yang sebaiknya saya taruh di payload?
Jaga tetap ramping. Klaim terdaftar dari RFC 7519 adalah iss (issuer), sub (subject — biasanya ID pengguna), aud (audience), exp (expiration), nbf (not before), iat (issued at), dan jti (token ID). Di samping ini Anda bisa menambahkan klaim aplikasi seperti role, scope, atau email. Jangan menaruh rahasia di payload — JWT di-encode, bukan dienkripsi, jadi siapa pun yang memegang token bisa membaca setiap klaim. Jaga token di bawah sekitar 4 KB agar muat di header Authorization dan cookie.
Apakah JWT dienkripsi?
Tidak. JWT yang ditandatangani standar (sebuah JWS) di-encode Base64URL, bukan dienkripsi. Tanda tangan membuktikan token tidak dimanipulasi dan diterbitkan oleh seseorang yang memegang key, tetapi header dan payload sepenuhnya bisa dibaca siapa pun yang memegang token. Jika Anda butuh payload itu sendiri bersifat rahasia, Anda butuh JWE (JWT terenkripsi), yang merupakan format berbeda. Alat ini menghasilkan token JWS yang ditandatangani, jenis yang dipakai untuk sebagian besar alur autentikasi dan otorisasi.
Kenapa penandatanganan RS256 atau ES256 saya gagal?
Penyebab paling umum adalah: (1) key tidak dalam format PKCS8 — konversi key tradisional -----BEGIN RSA PRIVATE KEY----- (PKCS1) dengan openssl pkcs8 -topk8 -nocrypt -in old.pem -out pkcs8.pem; (2) kurva tidak cocok dengan algoritma — ES256 butuh key P-256, ES384 butuh P-384, ES512 butuh P-521; (3) Anda menempel public key atau sertifikat alih-alih private key; atau (4) key dienkripsi dengan passphrase, yang tidak bisa diimpor langsung oleh Web Crypto API. Dekripsi dulu dengan openssl pkey lalu tempel blok PKCS8 yang tidak terenkripsi.
Apakah alat ini mendukung token tanpa tanda tangan alg:none?
Tidak, dan ini memang disengaja. Token alg:none tidak punya tanda tangan, yang berarti siapa pun bisa memalsukannya — inilah akar dari kerentanan klasik bypass autentikasi JWT. Karena inti dari sebuah encoder adalah menghasilkan token yang ditandatangani, alat ini hanya menawarkan algoritma penandatanganan sungguhan. Jika Anda mempelajari alg:none untuk riset keamanan, Anda bisa menyusunnya secara manual dengan meng-encode Base64URL header dan payload lalu membiarkan segmen tanda tangan kosong — token tetap diakhiri titik di ujung (header.payload.) — tetapi Anda tidak boleh pernah menerima token seperti itu di production.
Bisakah saya membuat JWT lewat kode saja?
Bisa. Di Node.js: jsonwebtoken.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' }). Di Python: jwt.encode(payload, key, algorithm='RS256') dengan PyJWT. Di Go: jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString(privateKey). Alat ini adalah cara tercepat untuk menghasilkan token untuk test cepat, request curl, atau fixture — tetapi di kode aplikasi Anda sebaiknya membuat token di sisi server dengan library yang terpelihara dan key yang dimuat dari secrets manager Anda, jangan pernah di-hardcode.