WEB28 / LATIHAN MEMAHAMI RANCANGAN
JWT: decode bukan verifikasi
Masih dalam pengembangan. Belajar pelan-pelan. Gunakan komputer sendiri dan data contoh.
Isi pelajaran ini
Kita belajar apa?
JWT adalah salah satu bentuk token yang dapat membawa keterangan pengguna. Isi yang bisa dibaca belum berarti isinya asli. Program perlu memeriksa tanda tangan digital dan aturan token. Contoh kita hanya belajar mengubah teks menjadi bentuk lain lalu membacanya kembali.
Bayangkan seperti ini
Isi surat bisa dibaca siapa saja, tetapi cap atau tanda tangan perlu diperiksa untuk mengetahui asalnya.
Arti kata yang mungkin baru
- token
- tanda digital yang dapat dipakai aplikasi sesuai aturan tertentu
- Python
- bahasa dan alat untuk menjalankan program contoh
Penjelasan tambahan jika kamu ingin tahu lebih jauh
JWT bertanda tangan mengikat payload dengan kunci dan algoritma. Base64url bukan enkripsi: payload dapat dibaca. Validasi mencakup signature, algoritma yang diizinkan, issuer, audience dan waktu sesuai kontrak. Pelajaran ini latihan lokal struktur token, bukan implementasi kriptografi produksi.
Persiapan
Siapkan catatan dan baca panduan perangkat. Pakai data buatan, bukan data pribadi. Baca satu langkah, kerjakan, lalu periksa hasilnya sebelum melanjutkan.
Pelajaran ini tidak meminta kamu menjalankan server lab. Siapkan aplikasi atau file yang disebut pada langkah latihan di bawah.
Langkah latihan
- Buka contoh jwt_demo.py di bawah.
- Simpan sebagai file Python di folder latihan.
- Jalankan dengan interpreter yang berhasil dipakai pada F08.
- Lihat data awal dapat dibaca kembali.
- Ubah role pada data contoh dan ingat bahwa perubahan itu tidak membuat tanda tangan yang sah.
jwt_demo.py — encoding payload, bukan JWT yang valid
import base64
import json
payload = {"sub": "demo", "role": "reader"}
raw = json.dumps(payload).encode("utf-8")
encoded = base64.urlsafe_b64encode(raw).rstrip(b"=")
print("Encoded:", encoded.decode())
padding = b"=" * (-len(encoded) % 4)
decoded = json.loads(base64.urlsafe_b64decode(encoded + padding))
print("Decoded:", decoded)
print("Tidak ada signature dan tidak ada server penerima.")Hasil yang diharapkan
Kamu memahami bahwa mengubah atau membaca isi token tidak membuktikan token itu diterima server.
Bandingkan dengan hasilmu sendiri. Jika berbeda, tulis apa yang terlihat lalu baca bagian bantuan di bawah. Jangan mengaku berhasil jika langkahnya belum kamu coba.
Jika terhambat
Berhenti sebentar dan baca pesan yang muncul. Periksa nama file, folder, alamat, dan apakah program latihan masih berjalan. Ulangi satu langkah saja. Jika tetap bingung, minta bantuan guru atau pendamping; jangan mematikan keamanan perangkat.
Petunjuk khusus untuk pelajaran ini
Padding base64url dapat perlu ditambahkan untuk decode. Jangan memakai token akun sungguhan.
Apa yang perlu kamu catat?
Tulis langkah yang kamu lakukan dan hasil yang benar-benar terlihat. Tambahkan satu kalimat: “Saya belajar bahwa …”. Untuk latihan menggambar, simpan gambar dan jawabanmu.
Cek pemahamanmu
Apakah payload JWT yang berhasil diedit berarti token valid?
Buka pembahasan
Tidak. Signature dan klaim harus diverifikasi; encoding atau decoding tidak membuktikan keaslian.
Tantangan mandiri
Jelaskan perbedaan encoding, signature dan enkripsi.
Pedoman penilaian tantangan
Jawaban harus sesuai hasil aktual, menyebut batas kesimpulan, dan tidak keluar scope. Gunakan langkah serta hasil harapan pelajaran sebagai pembanding; nilai 0 bila belum ada, 1 bila sebagian, 2 bila jelas dan dapat ditinjau.
Perbaikan & retest
Gunakan library terawat dan pin algoritma/kunci serta validasi klaim sesuai konteks.
