Latihan 1 dari materi PASETO (alternatif modern JWT) di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Latihan ini memodelkan struktur dan urutan pemeriksaan PASETO tanpa kriptografi sungguhan: tanda tangannya dibuat oleh tandaTangan(isi, secret) di kode awal, sidik jari sederhana dari isi dan secret, dan waktu cuma angka biasa. secret-nya sendiri gak pernah ikut di token. Urutan pemeriksaannya sama dengan server sungguhan.
-
buildToken(payload, secret, now): buat payload baru { ...payload, iat: now } (exp yang sudah ada dibiarkan), lalu kembalikan "v4.local." + isi + "." + tandaTangan(isi, secret), dengan isi = btoa(JSON.stringify(payloadBaru)).
-
verifyToken(token, secret, now): kembalikan object { valid, reason, payload }, diperiksa berurutan:
- token gak diawali
"v4.local.": { valid: false, reason: "malformed", payload: null }
parts[3] bukan tandaTangan(parts[2], secret): { valid: false, reason: "bad_signature", payload: null }
payload.exp ada dan payload.exp <= now: { valid: false, reason: "expired", payload }
- selain itu:
{ valid: true, reason: null, payload }
Payload dibaca dengan JSON.parse(atob(parts[2])), karena token.split(".") menghasilkan ["v4", "local", isi, tandaTangan].
Baris-baris console.log di kode awal sudah ada, biarkan begitu. Output-nya harus persis delapan baris ini, berurutan:
true
true
42
false
expired
false
bad_signature
malformed
Dicek juga: token { userId: 7, exp: 900 } yang dibuat di now 100 harus sah dengan userId 7 kalau diperiksa di 800, dan ditolak dengan alasan expired di 901. Token-nya gak boleh memuat secret, dan token yang isinya diubah harus ditolak dengan bad_signature.