Keamanan aplikasi web saat ini menjadi salah satu prioritas yang paling utama di tengah meningkatnya ancaman serangan siber. Sistem login berbasis username dan password ini saja tidak lagi cukup aman!!. Password ini dapat dicuri, ditebak, atau diretas dengan berbagai teknik seperti phishing atau credential stuffing. Karena itu, Multi-Factor Authentication (MFA) juga hadir sebagai lapisan tambahan keamanan.
MFA bekerja dengan menambahkan satu langkah lagi setelah para pengguna ini memasukkan password. Langkah tambahan itu biasanya berupa kode OTP (One-Time Password) yang digenerate secara dinamis melalui sebuah aplikasi autentikator seperti Google Authenticator, Authy, atau Microsoft Authenticator.
Dalam artikel terbaru pada kali ini, kita akan mempelajari cara paling terbaik yang bisa dicoba untuk bisa membangun sistem MFA secara penuh di Laravel 11 menggunakan paket pragmarx/google2fa-laravel. Selain itu, kita juga akan membahasnya mulai dari instalasi, konfigurasi, hingga integrasi ke sistem login yang sudah ada pada sebelumnya, lengkap dengan QR Code dan tombol aktivasi MFA di sisi pengguna!!.
Persiapan Lingkungan Framework Laravel
Langkah 1 – Instalasi Framework Laravel
Pastikan kamu sudah memiliki PHP minimal 8.2, Composer, dan MySQL/PostgreSQL.
Kemudian jalankan:

Apabila proses intalasi framework Laravel berjalan dengan baik, maka selanjutnya adalah melakukan langkah ke 2 yaitu berikut:
Langkah 2 – Ujicoba Jalankan Framework Laravel
Pastikan jendela command prompt Anda aktif pada project yang baru Anda buat lalu jalankan perintah berikut pada command prompt
php artisan serve
Apabila berjalan dengan baik, maka Anda akan menjumpai halaman web Framework Laravel. Perlu diketahui bahwa Laravel secara default akan berjalan di http://127.0.0.1:8000
Langkah 3 – Instalasi Paket pragmarx/google2fa-laravel
Paket dengan menggunakan pragmarx/google2fa-laravel tentunya akan sangat memudahkan kita untuk menghasilkan secret key, membuat QR Code, dan memverifikasi OTP pengguna dengan jauh lebih baik!!.
Instalasi:

Setelah berhasil melakukan instalasi library diatas, maka Anda perlu melakukan publish dengan langkah berikut:

Perintah diatas jika dijalankan maka akan menambahkan file config/google2fa.php.
Langkah ke 4 – Membuat Sistem Login Dasar (Laravel Breeze)
Untuk sistem autentikasi yang sangat cepat, kita bisa gunakan Laravel Breeze.

Masih aktif pada project laravel Anda, lalu jalankan perintah diatas. Perintah tersebut jika dijalankan maka akan membentuk punya sistem login/register dasar di Laravel.
Untuk membuktikannya, Anda dapat membuka url http://127.0.0.1:8000/register pada web browser untuk membuat akun baru pada project Anda.
Langkah ke 5 – Menambah Kolom MFA di Database
Untuk menggunakan fitur MFA maka kita perlu menambahkan kolom google2fa_secret dan is_mfa_enabled di tabel users pada database project Anda.
Buat file migration baru pada project Laravel Anda dengan menjalankan perintah berikut:

Jika berjalan dengan baik, maka Anda akan menemukan satu file Migration pada project Laravel Anda. Lalu lakukan sedikit perubahan pada file migration tersebut seperti berikut:

Lalu jalankan perintah artisan migrate seperti berikut:
php artisan migrate
Dengan demikian Anda telah menamkan kolom pada tabel users di project Anda.
Langkah ke 6 – Integrasi Google2FA di Laravel
Untuk melakukan integrasi Google2FA di Laravel gunakanlah PragmaRX\Google2FALaravel\Support\Authenticator untuk memproses OTP dan QR Code.
Anda dapat menambahkan alias ke config/app.php seperti berikut:

Langkah ke 7 – Membuat Halaman Setup MFA (Generate QR Code + Tombol Aktivasi)
Langkah selanjutnya dalah kita perlu melakukan sedikit modifikasi pada file Route, yakni pada routes/web.php. Tambahkan potongan kode berikut di routes/web.php:

Lalu, buatlah sebuah file Controller baru dengan menjalankan sebuah perintah berikut:
php artisan make:controller MFAController
Setelah berhasil membuat file Controller tersebut, langkah selanjutnya adalah melakukan modifikasi file Controller tersebut dengan menambahkan potongan kode berikut :

Langkah selanjutnya dalah kita perlu membuat satu file view, yaitu file resources/views/mfa/setup.blade.php seperti berikut :

Langkah ke 8 – Halaman Verifikasi MFA Setelah Login
Kita perlu menambahkan langkah verifikasi setelah user melakukan login dengan menamhkan potongan kode-kode berikut pada file routes/web.php:

Kemudian lakukan edit pada file Controller MFAController dengan menambahkan potongan kode berikut :

Langkah selanjutnya adalah kita perlu membuat satu buah file view, yaitu view blade halaman verifikasi MFA itu sendiri, resources/views/mfa/verify.blade.php

Langkah ke 9 – Middleware MFA
Anda perlu menambahkan middleware, jalankan perintah berikut untuk menggenerate file middleware seperti berikut :
php artisa make:middleware CheckMFA
Dengan melakukan sedikiti modifkasi, pastikan file middleware Anda berisi potongan kode berikut :

Selanjutnya Anda perlu mendaftarkan pada file kernel di app/Http/Kernel.php seperti berikut:

Lalu jangan lupa untuk menggunakan pada route dashboard seperti contoh berikut :

Langkah ke 10 – Penanganan Error dan Reset MFA
Kita perlu menambahkan sebuah fasilitas tombol untuk menangani error pada MFA atau mungkin sebagai insan Manusia kita seringkali lupa, atau bahkan perangkat kita error.
Untuk menangani error kita perlu menambahkan route dan method reset MFA:

Kemudian lakukanlah edit pada file Controller MFAController dan tambahkan potongan kode berikut :

Seperti kita lihat pada potongan kode diatas kita akan memerintahkan agar kolom pada table users terkait MFA direset menjadi null dan false.
Dan berikut adalah file view untuk tombol reset MFA tersebut.

Tips and Trik Penerapan Terbaik Implementasi MFA
- Gunakan HTTPS untuk Semua Koneksi
Langkah paling mendasar yang bisa dilakukan pada sebelumnya dalam menjaga keamanan MFA adalah memastikan seluruh komunikasi antara client dan server berlangsung melalui HTTPS (Hypertext Transfer Protocol Secure). Protokol yang satu ini juga mengenkripsi seluruh data yang dikirim, termasuk OTP dan secret key, sehingga tidak bisa disadap oleh pihak ketiga. Laravel sendiri telah mendukung HTTPS secara native, dan juga bisa dipaksa dengan middleware berikut di file app/Http/Middleware/TrustProxies.php
- Simpan Secret Key Secara Terenkripsi
Secret key MFA yang dihasilkan untuk setiap pengguna ini tidak boleh disimpan dalam bentuk plain text. Laravel adalah tool yang menyediakan fungsi bawaan untuk bisa mengenkripsi data secara aman!, yaitu Crypt::encryptString() dan Crypt::decryptString().
Dengan demikian, meskipun database bocor, secret key pengguna akan tetap terlindungi karena hanya bisa didekripsi dengan baik oleh aplikasi Laravel yang memiliki kunci enkripsi valid (APP_KEY di file .env).
- Tambahkan Limit Percobaan Verifikasi OTP
Salah satu serangan yang paling umum terhadap MFA adalah brute-force attack, yaitu mencoba dengan berbagai kombinasi OTP hingga menemukan yang benar. Untuk mencegah hal ini, maka batasilah jumlah percobaan OTP yang dapat dilakukan pengguna dalam satu sesi. Laravel menyediakan fitur rate limiting melalui ThrottleRequests middleware!. Kamu bisa menambahkannya.
- Gunakan Backup Codes
Tidak jarang pengguna akan kehilangan akses ke perangkat autentikatornya. Untuk menghindari adanya terkunci dari akun, sediakan backup codes, yaitu serangkaian kode sekali pakai yang juga bisa digunakan ketika MFA tidak bisa pengguna akses. Selain itu, Laravel juga dapat menyimpan backup codes ini secara terenkripsi di database!. Misalnya, buat lima hingga sepuluh kode unik saat MFA pertama kali diaktifkan.
- Log Aktivitas MFA untuk Audit Keamanan
Mencatat seluruh aktivitas MFA ini penting sekali untuk dilakukan oleh pengguna agar bisa mendeteksi adanya potensi pelanggaran keamanan. Laravel ini juga menyediakan mekanisme logging yang fleksibel. Kamu bisa mencatat kapan pengguna mengaktifkan, menonaktifkan, ataupun gagal memverifikasi OTP!.
Kesimpulan
Implementasi Multi-Factor Authentication (MFA) di Laravel ini sendiri telah menggunakan sebuah paket bernama pragmarx/google2fa-laravel yang terbukti sangat fleksibel serta mudah untuk diintegrasikan dengan sistem autentikasi seperti Laravel Breeze. Penambahan lapisan keamanan kedua ini menjadikan aplikasi menjadi jauh lebih tangguh terhadap ancaman pencurian kredensial dan serangan brute-force!!.
Dalam penerapannya, fitur paling utama yang berhasil dibangun meliputi setup MFA dengan QR Code, aktivasi OTP melalui Google Authenticator, middleware pengaman MFA, proses verifikasi OTP setelah melakukan proses login, serta opsi untuk mereset MFA bagi para pengguna ini. Dengan kombinasi yang tepat antara pengalaman pengguna (UX) yang sederhana dan juga mekanisme keamanan tingkat tinggi.
Maka pengembang dapat memastikan sistem tetap aman tanpa mengorbankan kenyamanan pengguna. Penerapan ini bukan hanya meningkatkan kepercayaan pengguna terhadap aplikasi, tetapi memperkuat reputasi pengembang dalam menghadirkan solusi autentikasi paling terpercaya pada ekosistem Laravel.
Demikianlah sedikit ulasan mengenai penerapan Multi-Factor Authentication (MFA) di Laravel, semoga artikel ini bermanfaat. Terima kasih..




