Latihan 1: PASETO (alternatif modern JWT) — Auth

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.

  1. 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)).

  2. 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:

  1. true
  2. true
  3. 42
  4. false
  5. expired
  6. false
  7. bad_signature
  8. 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.

Hint