Belajar Two-Factor Authentication (2FA) berbasis TOTP dari dasar hingga production-grade: pre-requisites skill & setup environment, sejarah latar belakang & mengapa membutuhkannya, konsep dasar TOTP & arsitektur utama, fondasi autentikasi login & session, generate secret & otpauth URI, QR code & provisioning di frontend, verifikasi code pertama enrollment confirm, menyimpan secret dengan aman, login flow dengan 2FA challenge, backup & recovery codes, rate limiting & replay protection, disable reset & rotasi secret, skema database & data management, hardening transport HTTPS cookie & CSP, OWASP & best practices keamanan, session token & trusted devices, testing RFC test vectors & E2E real device, melampaui TOTP WebAuthn & passkeys, enterprise enforcement & compliance, UX accessibility & copy-paste, produksi deployment secrets & observability, ekosistem 2026 provider & authenticator apps, hingga ekosistem alternatif & refleksi akhir dengan total 23 episode.
Sebelum membangun fitur 2FA berbasis TOTP, kalian perlu menguasai JavaScript dan TypeScript, autentikasi dasar password session JWT, serta SQL. Di episode ini kalian juga menyiapkan Node.js 24 LTS, menginstall otplib qrcode dan express-rate-limit, lalu memasang Google Authenticator untuk menguji scan dan code.

Episode ini menelusuri evolusi autentikasi dari password menuju WebAuthn passkeys, standar RFC 4226 dan RFC 6238 yang melahirkan HOTP dan TOTP, mengapa password lemah terhadap credential stuffing, serta alasan faktor kepemilikan dan compliance enterprise menjadikan 2FA sebuah keharusan.

Episode ini membedah anatomi kode TOTP: shared secret Base32, counter waktu epoch dibagi 30 detik, HMAC-SHA1, dan truncation menjadi 6 digit. Kalian juga mempelajari arsitektur end-to-end dari generate secret, QR code, verifikasi pertama, sampai login dua langkah, termasuk pentingnya sinkronisasi jam.

Sebelum menambahkan lapisan 2FA, episode ini membangun fondasi autentikasi: registrasi dan login password dengan bcrypt, session cookie HttpOnly dan JWT, struktur user model dengan kolom secret TOTP, serta peta endpoint auth yang akan disisipi tantangan MFA di episode 8.

Episode ini membahas pembuatan secret TOTP yang acak dan unik per pengguna dengan otplib, menyusun provisioning URI otpauth yang dikenali Google Authenticator, encoding issuer dan account, serta alasan Base32 RFC 3548 menjadi bahasa bersama seluruh authenticator app.

Episode ini mengubah provisioning URI menjadi QR code yang bisa dipindai Google Authenticator, merendernya di server dengan qrcode dan menampilkan hanya sekali saat enrollment, plus merancang halaman Enable 2FA dengan opsi secret manual untuk pengguna tanpa kamera.

Episode ini menutup alur enrollment: pengguna memasukkan 6 digit setelah memindai QR, server memverifikasinya dengan authenticator check dan toleransi window, baru mengaktifkan totpEnabled. Kalian juga melihat kapan recovery codes pertama kali ditampilkan.

Episode ini menjelaskan mengapa secret TOTP tidak boleh disimpan plaintext, cara mengenkripsinya dengan AES-256-GCM memakai kunci dari environment MFA_ENCRYPTION_KEY, serta praktik satu secret per user dan logging yang tidak pernah menyertakan secret atau kode.

Episode ini mengubah login menjadi dua langkah: verifikasi password yang hanya menandai pendingMfa, lalu verifikasi kode TOTP yang baru memberikan session penuh. Kalian juga mempelajari pemisahan endpoint /login dan /login/mfa serta cara mencegah bypass protected route sebelum MFA selesai.

Episode ini membahas recovery codes sebagai jalan keluar saat authenticator hilang: membuat 10 kode single-use, menampilkannya sekali, menyimpannya sebagai hash seperti password, menandai kode terpakai, dan mengganti seluruh batch saat regenerasi.
