Lewati ke konten utama
menjadi.dev
Chapter 38.7 API & Auth Lanjutan

Session vs JWT: Trade-off yang Sering Disalahpahami

Kapan pakai session-based auth, kapan pakai JWT — dan kenapa bukan binary choice

Tujuan Pembelajaran

  • Memahami perbedaan fundamental session-based dan token-based authentication
  • Mampu memilih strategi yang tepat berdasarkan use case
  • Mengerti BFF (Backend-for-Frontend) pattern untuk SPA security

Analogi

Diagram

      Session vs JWT = Kunci Fisik vs Kunci Digital:

Session (Kunci fisik + Resepsionis):
Kamu titip kunci ke resepsionis (server). Resepsionis ingat kamu siapa.
Kelebihan: bisa blokir akses kapan saja (cabut session).
Kekurangan: resepsionis harus selalu available (stateful).

JWT (Kunci digital yang kamu pegang):
Kamu pegang kunci sendiri. Bisa buka pintu tanpa resepsionis.
Kelebihan: tidak perlu resepsionis (stateless, scalable).
Kekurangan: tidak bisa cabut kunci sampai expired (no instant revocation).
    

Session = server ingat. JWT = client pegang. Bukan binary choice — seringkali kombinasi keduanya adalah jawaban terbaik.

Penjelasan Konsep

Session-based vs JWT adalah debat abadi — tapi keduanya bukan musuh. Setiap pendekatan punya trade-off.

Session-based: Server menyimpan session (Redis/DB). Client hanya pegang session ID (cookie httpOnly). Kelebihan: (1) Instant revocation — cabut session di server, langsung efektif. (2) Sensitive data tidak expose ke client. (3) Lebih sederhana untuk monolith. Kekurangan: (1) Stateful — scaling butuh shared session store. (2) CORS issues untuk cross-domain.

JWT: Server tidak menyimpan state. Token berisi klaim (user_id, role, exp). Kelebihan: (1) Stateless — ideal untuk microservices. (2) Self-contained — tidak perlu lookup ke DB setiap request. (3) Cross-domain friendly. Kekurangan: (1) Tidak bisa instant revoke. (2) Ukuran lebih besar dari session ID. (3) Jangan simpan sensitive data di JWT payload (bisa didecode).

Hybrid (yang sering jadi best practice): BFF (Backend-for-Frontend) Pattern — SPA menggunakan session cookie dengan BFF layer. BFF mengelola token (JWT atau opaque) ke downstream services. Kelebihan: SPA tidak pegang token sensitif, BFF bisa revoke session, downstream services tetap stateless.

Decision framework: Monolith → Session. Microservices → JWT. SPA → BFF + Session. Mobile → JWT with refresh token rotation.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami perbedaan fundamental session-based dan token-based authentication., mampu memilih strategi yang tepat berdasarkan use case., dan mengerti BFF (Backend-for-Frontend) pattern untuk SPA security. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Session vs JWT, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Session = server ingat. JWT = client pegang. Bukan binary choice — seringkali kombinasi keduanya adalah jawaban terbaik. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Prompt AI

Minta AI untuk membandingkan session-based, JWT, dan BFF pattern untuk 3 use case berbeda: (1) E-commerce monolith, (2) Microservices SaaS, (3) React Native mobile app.

Pertanyaan Reflektif

Cek aplikasi-mu: apakah pakai session atau JWT? Apakah ada alasan kuat untuk pilihan itu? Atau cuma karena 'semua orang pakai JWT'?