Autentikasi dua faktor (2FA) berarti selain apa yang pengguna tahu (seperti username + password), kita menambahkan faktor kedua apa yang pengguna miliki atau apa yang pengguna adalah misalnya token fisik, SMS kode, atau aplikasi TOTP, sama seperti Google Authenticator. Keuntungan yang utama adalah:
- Jika password pengguna bocor atau ditebak, maka tanpa faktor kedua akun tetap sulit diakses.
- Aplikasi TOTP (seperti Google Authenticator, Authy, Microsoft Authenticator) memberi faktor kedua berupa kode yang berubah tiap kurang lebih 30 detik, maka para pengguna harus memindai QR code saat aktivasi dan selanjutnya memasukkan kode dari aplikasi ke login.
- Relatif murah, mudah diterapkan dan meningkatkan keamanan signifikan.
Dalam konteks CodeIgniter 4 (CI4) ini sendiri, maka menambahkan 2FA ini berarti setelah login dengan email/password, kita menambahkan layer verifikasi tambahan dengan “memasukkan kode 6 digit dari aplikasi Authenticator” ini. Atau bisa juga ketika pengguna mengaktifkan 2FA di profilnya, maka kita bisa menyimpan secret (rahasia) dengan jauh lebih baik untuk pengguna dan kemudian memverifikasi kode!.
Teknologi dan Library yang Digunakan
Untuk mengambil langkah praktis, berikut hal‑yang kita butuhkan:
- Framework CodeIgniter 4 sebagai basis aplikasi.
- Library TOTP (Time‑based One‑Time Password) di PHP dan cocok dengan Google
Contoh library:
- RobThree TwoFactorAuth — library TFA / TOTP untuk PHP.
- Spomky‑Labs OTPHP — juga implementasi RFC6238/4226.
- Anda bisa pilih satu sesuai kebutuhan. Pada tutorial kali ini saya akan menggunakan RobThree TwoFactorAuth sebagai contoh (namun Anda bisa menyesuaikan dengan library lain).
- Basis data pengguna, tabel user yang punya kolom untuk menyimpan secret 2FA (jika aktif) dan status 2FA aktif/tidak.
- View login, pengaturan 2FA, controller yang mengatur alur login + verifikasi 2FA.
Arsitektur Alur Kerja 2FA
Sebelum kode, mari gambarkan alur kerja yang akan kita bangun:
Pengguna melakukan login dengan username/email + password.
Jika login berhasil dan pengguna belum mengaktifkan 2FA, kita bisa:
- Menawarkan opsi “Aktifkan 2FA” (opsional).
- Atau langsung masuk ke aplikasi (tanpa 2FA) jika 2FA tidak wajib.
Jika pengguna aktifkan 2FA, maka:
- Sistem menghasilkan secret unik untuk pengguna.
- Menampilkan QR code yang bisa dipindai oleh aplikasi Authenticator.
- Pengguna memindai dan memasukkan satu kode verifikasi sebagai konfirmasi.
- Jika valid, kita simpan secret di database dan tandai 2FA aktif.
Selanjutnya, setiap kali login:
- Cek email/password → jika benar
- Cek apakah pengguna aktifkan 2FA → jika ya → tampilkan form input kode 2FA.
- Verifikasi kode TOTP dengan secret yang tersimpan.
- Jika benar → login sukses. Jika salah → tolak.
Tambahan: opsi reset 2FA, matikan 2FA, dan backup kode (recovery codes) bisa juga dipertimbangkan.
Persiapan Project CodeIgniter 4
Mari mulai dengan persiapan:
Instalasi CodeIgniter 4
Jika belum, instal CodeIgniter 4 via composer:

Lalu atur file .env untuk konfigurasi database dan environment (CI_ENVIRONMENT = development).
Konfigurasi Database
Buat tabel users misalnya:

Kolom is_2fa_enabled menandakan apakah 2FA aktif, dan twofa_secret menyimpan secret (jika aktif).
Instal Library TOTP
Misalnya, menggunakan RobThree TwoFactorAuth. Jalankan:

Setelahnya kita akan gunakan class-nya di controller.
Model User
Di app/Models/UserModel.php, buat model sederhana:

Implementasi Fungsi untuk Aktifkan 2FA
Sekarang kita buat alur supaya pengguna bisa mengaktifkan 2FA di profilnya.
Route
Di app/Config/Routes.php tambahkan:

Controller Profile
Di app/Controllers/Profile.php:
Konfigurasi Controllers 2FA Codeigniter 4 Function Enable Two Factor.

Penjelasan:
- Kita menggunakan TwoFactorAuth dengan parameter issuer ‘MyApp’.
- Metode createSecret() menghasilkan secret unik.
- getQRCodeImageAsDataUri() mengembalikan data URI untuk QR image yang bisa langsung ditampilkan di view.
- Verifikasi kode dilakukan dengan verifyCode($secret, $code).
- Jika valid, kita update database agar is_2fa_enabled=1 dan simpan twofa_secret.
View profile/2fa_setup.php
Source code:

Dengan ini, pengguna bisa mengaktifkan 2FA dan kita menyimpan secret mereka.
Implementasi Login dengan 2FA
Saat login, kita harus memodifikasi alur agar jika 2FA aktif maka muncul langkah tambahan.
Route Login
Tambahkan route di app/Config/Routes.php, misalnya:

Controller Auth
Di app/Controllers/Auth.php:


View Login
app/Views/auth/login.php:

app/Views/auth/login_2fa.php:

Dengan setup di atas, alur login yang aktif 2FA akan melalui dua step, password → kode 2FA.
Penjelasan Kode dan Modul Security
Mari kita lihat beberapa hal penting yang harus diperhatikan:
Validasi dan Keandalan
- Pastikan password_hash disimpan dengan password_hash() (PHP) dan diverifikasi dengan password_verify().
- Untuk library TOTP, verifikasi harus mempertimbangkan drift waktu (misalnya ±30 detik) dan membatasi percobaan (throttling) untuk mencegah brute‑ Library RobThree TwoFactorAuth sudah mendukung TOTP sesuai standar.
- Saat pengguna mengaktifkan 2FA, simpan secret secara aman (mis: terenkripsi atau minimal akses terbatas).
- Saat menampilkan QR Code atau secret, pastikan Anda hanya menampilkan pada orang yang login dan telah terotentikasi.
Pengelolaan Session
- Saat login password sukses tetapi 2FA aktif → kita menyimpan session(‘2fa_user_id’) sebagai penanda “pengguna sedang melewati step 2FA”. Jangan langsung set user_id.
- Setelah kode 2FA benar → hapus session 2fa_user_id dan set user_id.
- Ini mencegah pengguna masuk tanpa memverifikasi 2FA.
Penggunaan Library TOTP
- Library RobThree TwoFactorAuth (atau lainnya) memberikan fungsi utama:
- createSecret() → menghasilkan secret baru.
- getQRCodeImageAsDataUri() atau getQRCodeUrl() → menghasilkan URL atau data URI gambar QR Code yang bisa dipindai oleh aplikasi Authenticator.
- verifyCode($secret, $code) → memverifikasi kode yang dimasukkan berdasarkan secret.
Contoh penggunaan library lain (untuk referensi) seperti Spomky‑Labs OTPHP.
User interface (UI) Sederhana
Saya menggunakan view sederhana tanpa styling spesial. Dalam produksi, tentu Anda ingin:
- Menampilkan instruksi jelas saat setup 2FA (misalnya: “Scan QR code dengan aplikasi Authenticator yang mendukung TOTP (Google Authenticator, Authy, Microsoft Authenticator)”).
- Menyediakan opsi “backup codes” bila user kehilangan akses ke aplikasi Authenticator.
- Menyediakan fitur “nonaktifkan 2FA” dengan verifikasi tambahan (misalnya email + kode 2FA).
- Menyediakan tampilan error/hint yang tentunya sangat aman (tidak memberi tahu “kode yang salah” vs “user tidak mengaktifkan 2FA”).
Tambahan Fitur yang Dianjurkan
Setelah implementasi dasar, berikut fitur tambahan yang sangat disarankan:
- Recovery Codes
Beri semua pengguna ini sejumlah kode “cadangan” (backup codes) yang bisa digunakan apabila device Authenticator mereka hilang. Contoh: generate 10 kode acak, tampilkan sekali disaat setup, dan simpan hash‐nya di database. Pengguna juga bisa memasukkan salah satu kode ini sebagai alternatif kode TOTP.
- Nonaktifkan 2FA
Tambahkan sebuah opsi bagi para pengguna untuk mematikan 2FA agar bisa aktif dengan baik (misalnya lewat sebuah profil), namun ini hanya setelah verifikasi (password + kode 2FA) atau via email konfirmasi.
- Throttling & Lockout
Untuk bbisa meningkatkan keamanan, batasi jumlah percobaan verifikasi kode 2FA (misalnya maksimum 5 percobaan dalam 5 menit) dan implementasikan lockout sementara atau log aktivitas mencurigakan!!.
- Enkripsi Secret
Agar lebih aman dan terbebas dari adanya gangguan, maka Anda tentu bisa menyimpan twofa_secret ini dalam bentuk terenkripsi (misalnya openssl_encrypt()) ataupun setidak‑nya diacak dengan key aplikasi!!.
- Reset/Recovery Device
Sediakan prosedur untuk pengguna yang kehilangan akses ke aplikasi Authenticator (misalnya verifikasi lewat email atau nomor HP). Namun fitur ini harus sangat hati‑hati karena bisa menjadi jalur bypass 2FA
- View UI yang responsif / QR Code alternative
Jika aplikasi digunakan di perangkat mobile, tampilkanlah QR Code dengan ukuran sesuai serta fallback, menampilkan kode secret manual agar bisa dimasukkan di aplikasi Authenticator jika pemindaian gagal!.
Kesimpulan
Mengintegrasikan Google Authenticator (atau aplikasi TOTP lainnya) ke dalam CodeIgniter 4 ini memang memerlukan beberapa langkah!, namun tidak rumit untuk bisa dilakukan bahkan oleh pemula sekalipun:
- Tambahkan kolom di database untuk menyimpan status 2FA dan secret pengguna.
- Instal library TOTP untuk PHP (misalnya RobThree TwoFactorAuth).
- Buat alur: setup 2FA → login password → login kode 2FA.
- Pastikan keamanan: verifikasi dengan benar, throttling, session manajemen baik, dan fallback/backup untuk pengguna.
- UI sederhana sudah cukup untuk memulai, Anda bisa mempercantik dan menambah fitur seperti recovery codes, disable 2FA, logging.
Dengan implementasi ini, maka sistem login yang Anda miliki juga akan jauh lebih aman karena bahkan jika password pengguna bocor, attacker tetap butuh kode 2FA dari aplikasi di perangkat para pengguna.
Oke guys demikian tutorial integrasi MFA/2FA di Codeigniter 4 dari team Jogjatech.com, semoga bermanfaat.
Apabila Anda mengalami kendala dalam menerapkan MFA/2FA pada website maupun aplikasi Anda, maka Anda tidak perlu khawatir karena kami team JogjaTech.com menerima pekerjaan maintenance termasuk integrasi MFA pada website, sistem maupun aplikasi Anda. Anda dapat meninggalkan pesan singkat, padat melalui email yang tertera pada website ini terkait penawaran kerjasama dengan kami. Terimakasih.





