Pendekode / pemverifikasi JWT

Dekode header dan payload JWT, verifikasi tanda tangannya, dan lihat kapan ia kedaluwarsa.

Token

Apa itu JSON Web Token

Sebuah JSON Web Token (JWT) adalah cara yang ringkas dan mandiri untuk membawa sekumpulan klaim — pernyataan seperti "ini adalah pengguna 42" atau "token ini kedaluwarsa siang hari" — dalam bentuk yang dapat diverifikasi. JWT ada di mana-mana dalam autentikasi modern: setelah Anda masuk, sebuah server sering menyerahkan JWT bertanda tangan ke browser Anda, dan setiap permintaan berikutnya menyertakannya sehingga server dapat memercayai siapa Anda tanpa mencari apa pun. Karena token membawa klaim dan tanda tangannya sendiri, ia disebut "tanpa-keadaan".

Sebuah JWT adalah tiga bagian berkode Base64URL yang digabung titik: header.payload.signature. Alat ini memecah dan mendekode bagian-bagian itu untuk Anda, menampilkan klaim dalam bentuk terbaca, dan — jika Anda memberikan kunci penanda tangan — memverifikasi bahwa tanda tangannya asli.

Ketiga bagian

  • Header: menjelaskan bagaimana token ditandatangani, yang terpenting algoritmenya ("alg", mis. HS256 atau RS256) dan jenis token.
  • Payload: klaim itu sendiri — sebuah objek JSON dengan bidang seperti sub (subjek/pengguna), exp (kedaluwarsa), iat (diterbitkan-pada), dan data khusus apa pun yang ditambahkan penerbit.
  • Signature: sebuah nilai kriptografis yang dihitung atas header dan payload dengan sebuah rahasia atau kunci privat. Itulah yang membuat JWT tepercaya: ubah satu karakter payload dan tanda tangannya tak lagi cocok.

Yang krusial, header dan payload hanya dikodekan, bukan dienkripsi. Siapa pun yang punya token bisa membacanya. Tanda tangan tak menyembunyikan isinya — ia membuktikan bahwa isinya tak dirusak. Jangan pernah menaruh sandi atau rahasia dalam payload JWT.

Memverifikasi tanda tangan

Mendekode sebuah JWT memberi tahu Anda apa yang diklaimnya; memverifikasinya memberi tahu apakah harus memercayai klaim itu. Verifikasi menghitung ulang tanda tangan dari header dan payload memakai sebuah kunci dan memeriksa bahwa ia cocok. Ada dua keluarga algoritme, dan mereka memakai jenis kunci berbeda:

  • HMAC (HS256, HS384, HS512): skema simetris. Rahasia bersama yang sama menandatangani sekaligus memverifikasi. Berikan rahasia itu untuk memverifikasi.
  • RSA dan ECDSA (RS256, PS256, ES256 dan sejenisnya): skema asimetris. Sebuah kunci privat menandatangani dan sebuah kunci publik memverifikasi. Berikan kunci publik berkode PEM untuk memverifikasi — Anda tak pernah butuh kunci privat sekadar untuk memeriksa sebuah token.

Alat ini mendeteksi algoritme dari header secara otomatis dan memverifikasi sepenuhnya di browser Anda memakai Web Crypto API, jadi baik token maupun kunci tak pernah diunggah.

Membaca klaim standar

Segelintir nama klaim distandarkan (mereka disebut "klaim terdaftar"). Alat ini melabelinya dan mengubah yang berbasis-waktu dari stempel waktu Unix mentah menjadi waktu lokal Anda, dengan status berbahasa jelas sehingga Anda bisa langsung melihat apakah sebuah token aktif, kedaluwarsa, atau belum berlaku:

  • exp — waktu kedaluwarsa: setelah saat ini token seharusnya ditolak.
  • nbf — tidak sebelum: token tak valid sampai saat ini.
  • iat — diterbitkan pada: kapan token dibuat.
  • iss — penerbit: siapa yang membuat token.
  • sub — subjek: tentang siapa atau apa token itu (sering sebuah ID pengguna).
  • aud — audiens: untuk siapa token itu ditujukan.
  • jti — sebuah pengenal unik untuk token.

Pertanyaan yang sering diajukan

Apakah token atau kunci saya dikirim ke mana pun?
Tidak. Pendekodean dan verifikasi tanda tangan berjalan sepenuhnya di browser Anda memakai Web Crypto API. Token, rahasia, dan kunci publik tak pernah meninggalkan perangkat Anda, jadi aman untuk memeriksa token produksi.
Algoritme penanda tangan mana yang dapat diverifikasi?
HMAC (HS256, HS384, HS512) dengan rahasia bersama, serta RSA (varian RS dan PS) dan ECDSA (ES256, ES384) dengan kunci publik berkode PEM. Algoritme dideteksi otomatis dari header token.
Apakah sebuah JWT dienkripsi?
Tidak. Sebuah JWT bertanda tangan standar hanya dikodekan, bukan dienkripsi — siapa pun bisa membaca header dan payload-nya. Tanda tangan membuktikan token tak diubah, tetapi ia tak menyembunyikan isinya, jadi jangan pernah menyimpan rahasia dalam payload.
Apakah saya butuh kunci privat untuk memverifikasi token RS256?
Tidak. Algoritme asimetris memverifikasi dengan kunci publik. Anda hanya butuh kunci privat untuk membuat (menandatangani) sebuah token, tak pernah untuk memeriksanya.
Mengapa token saya tampil sebagai kedaluwarsa?
Klaim exp ada di masa lalu relatif terhadap jam perangkat Anda. Alat ini mengubah exp, nbf, dan iat ke waktu lokal Anda dan menampilkan status sehingga Anda bisa memastikan jendela keberlakuan token sekilas.
Apa perbedaan antara HS256 dan RS256?
HS256 simetris: satu rahasia bersama menandatangani sekaligus memverifikasi, yang paling sederhana ketika pihak yang sama melakukan keduanya. RS256 asimetris: sebuah kunci privat menandatangani dan sebuah kunci publik memverifikasi, yang memungkinkan banyak pihak memverifikasi token tanpa bisa memalsukannya.
Bisakah saya menyunting payload dan menandatangani ulang tokennya?
Alat ini hanya-baca: ia mendekode dan memverifikasi tetapi tak membuat atau menandatangani ulang token. Itu menjaganya tetap terfokus dan menghindari penanganan kunci penanda tangan privat.