Mengintegrasikan Google Authenticator (untuk Autentikasi Dua Faktor atau 2FA) ke dalam CodeIgniter 4 pada Form Login

0
10

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:

  1. RobThree TwoFactorAuth — library TFA / TOTP untuk PHP.
  2. Spomky‑Labs OTPHP — juga implementasi RFC6238/4226.
  3. 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:

Instalasi CodeIgniter 4

Lalu atur file .env untuk konfigurasi database dan environment (CI_ENVIRONMENT = development).

Konfigurasi Database

Buat tabel users misalnya:

2FA Codeigniter 4 table User

Kolom is_2fa_enabled menandakan apakah 2FA aktif, dan twofa_secret menyimpan secret (jika aktif).

Instal Library TOTP

Misalnya, menggunakan RobThree TwoFactorAuth. Jalankan:

Instal Library TOTP RobThree TwoFactorAuth

Setelahnya kita akan gunakan class-nya di controller.

Model User

Di app/Models/UserModel.php, buat model sederhana:

Konfigurasi Model User Codeigniter 4 2FA

Implementasi Fungsi untuk Aktifkan 2FA

Sekarang kita buat alur supaya pengguna bisa mengaktifkan 2FA di profilnya.

Route

Di app/Config/Routes.php tambahkan:

Konfigurasi Route 2FA Codeigniter 4

Controller Profile

Di app/Controllers/Profile.php:

Konfigurasi Controllers 2FA Codeigniter 4Konfigurasi Controllers 2FA Codeigniter 4 Function Enable Two Factor.

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:

View Profile Enable 2FA Codeigniter 4

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:

Konfigurasi Route Login 2FA Codeigniter 4 Jogjatech dot com

Controller Auth

Di app/Controllers/Auth.php:

Konfigurasi Controller Auth 2FA Codeigniter 4 Jogjatech dot com

Konfigurasi Function Controller Auth 2FA Codeigniter 4 Jogjatech dot com

View Login

app/Views/auth/login.php:

View Auth Login

app/Views/auth/login_2fa.php:

View Verifikasi 2FA

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:

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

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

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

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

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

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