Dalam pengembangan aplikasi web menggunakan framework seperti CodeIgniter 4 atau Laravel, sering kali kita membutuhkan proteksi tambahan untuk beberapa route atau path tertentu. Salah satu cara cepat dan sederhana yang bisa digunakan adalah menggunakan mekanisme Basic Authentication (Basic Auth).
Apa Itu Basic Authentication?
Basic Authentication adalah metode otentikasi HTTP yang meminta pengguna untuk memasukkan username dan password ketika mengakses halaman tertentu. Saat pengguna mencoba mengakses halaman yang dilindungi, browser akan otomatis menampilkan pop-up login. Jika kredensial yang dimasukkan sesuai, maka akses diberikan. Metode ini sederhana, namun cukup efektif untuk kebutuhan internal atau administratif.
Kenapa Menggunakan Basic Auth?
- Cepat dan mudah diimplementasikan
- Tidak perlu sistem login lengkap
- Cocok untuk proteksi area admin, panel pengelola, atau endpoint tertentu
- Didukung oleh semua browser modern
Menerapkan Basic Auth di CodeIgniter 4
Di CodeIgniter 4, kita dapat menambahkan Basic Authentication dengan membuat filter kustom. Filter ini bisa dihubungkan ke route tertentu yang ingin kita proteksi. Misalnya, kita ingin agar route /login
hanya dapat diakses jika pengguna melewati Basic Auth terlebih dahulu.
1. Membuat Filter
php spark make:filter BasicAuthFilter
Kemudian edit file BasicAuthFilter.php
dan tambahkan logika untuk membaca header Authorization:
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class BasicAuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
$username = 'admin';
$password = 'rahasia';
$hasAuthHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ?? null;
if ($hasAuthHeader && preg_match('/Basic\s+(.*)$/i', $hasAuthHeader, $matches)) {
$decoded = base64_decode($matches[1]);
list($user, $pass) = explode(':', $decoded, 2);
if ($user === $username && $pass === $password) {
return;
}
}
header('WWW-Authenticate: Basic realm="Area Terproteksi"');
header('HTTP/1.0 401 Unauthorized');
echo 'Halaman ini memerlukan autentikasi.';
exit;
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
}
}
2. Daftarkan Filter
Tambahkan ke Config/Filters.php
bagian alias:
'basicAuth' => \App\Filters\BasicAuthFilter::class
3. Tempelkan ke Route
Misalnya hanya ingin proteksi di route login:
$routes->get('login', '\CodeIgniter\Shield\Controllers\LoginController::loginView', ['filter' => 'basicAuth']);
Bagaimana dengan Laravel?
Di Laravel, kamu bisa menerapkan Basic Auth dengan middleware. Laravel sendiri menyediakan middleware auth.basic
. Kamu hanya perlu menambahkan middleware tersebut ke route yang diinginkan:
Route::get('/admin', function () {
return 'Halaman admin';
})->middleware('auth.basic');
Apakah Basic Auth Memiliki Masa Kadaluwarsa?
Basic Auth tidak memiliki masa kadaluarsa secara default. Browser akan menyimpan kredensial selama tab/jendela belum ditutup. Begitu pengguna menutup tab atau browser, kredensial akan terhapus dan mereka perlu login ulang saat mengakses kembali.
Untuk memaksa logout atau reset, kita bisa mengirim ulang header WWW-Authenticate
atau mengganti nama realm agar browser menganggapnya sebagai sesi baru.
Kesimpulan
Basic Authentication adalah solusi cepat untuk membatasi akses ke halaman tertentu dalam aplikasi web berbasis CodeIgniter 4 maupun Laravel. Meski tidak sekuat sistem login penuh, namun cukup aman untuk keperluan dasar, terutama jika digabungkan dengan HTTPS. Kamu juga bisa mengkombinasikan dengan session, atau menyesuaikan realm dan header untuk meningkatkan kontrol terhadap sesi.
Semoga panduan ini bermanfaat dan membantu kamu melindungi route atau path penting dalam aplikasimu. Jika ada pertanyaan lanjutan atau ingin belajar lebih lanjut tentang filter, middleware, atau autentikasi lanjutan, silakan tinggalkan komentar di bawah!