Proses Implementasi Multi-Factor Authentication (MFA) di Laravel

0
6

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:

Implementasi Multi-Factor Authentication (MFA) di Laravel

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:

Google2fa-laravel Proses Implementasi Multi-Factor Authentication (MFA) di Laravel

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

Implementasi Multi-Factor Authentication (MFA) di Laravel Publish Library

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.

Laravel Authentication 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:

File Migration MFA di Laravel

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:

Update File Migration MFA di Laravel

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:

Integrasi Google2FA di Laravel Alias Config

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:

Setup MFA Modifikasi Routes Web

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 :

Controller MFAController

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

MFA View QR Code

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:

Routes Verifikasi MFA Setelah Login

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

Controller Verifikasi MFA Setelah Login

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

View Blade verifikasi MFA

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 :

Middleware Cek MFA

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

Kernel Middleware MFA

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

Route dashboard cek MFA

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:

Route Reset MFA

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

Controller MFAController Reset MFA

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.

MFA View Blade Reset

Tips and Trik Penerapan Terbaik Implementasi MFA

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

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

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

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

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