Authentication (Web Context)
Autentikasi adalah proses memverifikasi identitas pengguna yang mengakses sistem web. Autentikasi yang kuat adalah lapisan pertahanan pertama dalam keamanan aplikasi web.
Basic Authentication
Basic auth adalah mekanisme autentikasi HTTP paling
sederhana. Klien mengirim username dan password
yang digabung dengan tanda titik dua (:) lalu
di-encode dengan Base64 di header
Authorization.
Authorization: Basic base64(username:password)
Kelemahan: Base64 bukan enkripsi - ini hanyalah encoding yang mudah didekode. Tanpa HTTPS, kredensial dikirim dalam bentuk teks yang jelas terlihat. Sangat tidak disarankan untuk aplikasi produksi tanpa kombinasi HTTPS.
Digest Authentication
Digest auth adalah perbaikan dari basic auth.
Server mengirim challenge (nilai acak/nonce), dan
klien mengirim hash dari username:realm:password:nonce.
Password tidak pernah dikirim dalam bentuk asli.
Kelemahan: Meskipun lebih aman dari basic auth, digest auth masih rentan terhadap beberapa serangan (replay attack, man-in-the-middle) dan tidak mendukung password hashing modern. Keduanya (basic dan digest) kini jarang digunakan di web modern, digantikan oleh mekanisme yang lebih aman.
Form-Based Authentication
Ini adalah metode autentikasi paling umum di web modern. Pengguna memasukkan kredensial melalui formulir HTML (biasanya username dan password), yang dikirim ke server melalui POST HTTPS. Server memverifikasi kredensial, membuat sesi, dan mengembalikan session cookie.
Keamanan: Formulir harus selalu menggunakan HTTPS, dan password harus di-hash (misal bcrypt, Argon2) sebelum disimpan di database. Implementasi harus tahan terhadap serangan brute force, SQL injection, dan timing attack.
Multi-Factor Authentication (MFA/2FA)
MFA memerlukan lebih dari satu faktor autentikasi untuk memverifikasi identitas. Tiga faktor utama:
- Something you know - Password, PIN.
- Something you have - Telepon, token perangkat keras, kartu pintar.
- Something you are - Sidik jari, face recognition, biometrik.
Two-Factor Authentication (2FA) adalah bentuk MFA yang paling umum, biasanya menggabungkan password (faktor pertama) dengan kode OTP (faktor kedua).
OTP (One-Time Password)
OTP adalah kode sekali pakai yang berlaku dalam waktu singkat.
- TOTP (Time-based One-Time Password) - Kode dihasilkan berdasarkan waktu saat ini dan shared secret yang sama di sisi server dan klien. Kode berubah setiap 30 atau 60 detik. Banyak digunakan di aplikasi authenticator seperti Google Authenticator atau Authy.
- HOTP (HMAC-based One-Time Password) - Kode dihasilkan berdasarkan counter yang bertambah setiap kali kode digunakan. Setiap penggunaan meningkatkan counter, memastikan kode tidak dapat digunakan ulang.
TOTP lebih populer karena lebih nyaman (tidak perlu melacak counter), tetapi memerlukan sinkronisasi waktu yang akurat antara klien dan server.
Single Sign-On (SSO)
SSO memungkinkan pengguna masuk sekali dan mengakses banyak aplikasi tanpa perlu login ulang. Mekanisme umum meliputi:
- SAML (Security Assertion Markup Language) - Standar berbasis XML untuk pertukaran data autentikasi dan otorisasi antara Identity Provider (IdP) dan Service Provider (SP).
- OAuth 2.0 / OpenID Connect (OIDC) - Protokol modern untuk otorisasi dan autentikasi. OAuth 2.0 fokus pada otorisasi (delegated access), sedangkan OIDC menambahkan lapisan autentikasi di atas OAuth 2.0.
SSO meningkatkan pengalaman pengguna tetapi menciptakan satu titik kegagalan: jika IdP diretas, semua aplikasi terpengaruh.
WebAuthn (Web Authentication)
WebAuthn adalah standar autentikasi modern dari W3C dan FIDO Alliance yang memungkinkan autentikasi passwordless menggunakan kriptografi kunci publik. Pengguna mendaftarkan perangkat (misal security key USB, fingerprint, atau face recognition), yang menghasilkan pasangan kunci publik-privat. Kunci privat tetap berada di perangkat pengguna; kunci publik disimpan di server.
Keunggulan: Tidak ada password yang bisa dicuri, tahan terhadap phishing, dan tidak bergantung pada kerahasiaan sisi server. WebAuthn adalah masa depan autentikasi web.
Password Policies
Kebijakan password yang baik adalah keseimbangan antara keamanan dan kegunaan:
- Minimum length - Minimal 8 - 12 karakter; panjang lebih penting daripada kompleksitas.
- Complexity - Kombinasi huruf besar, huruf kecil, angka, dan simbol.
- Password rotation - Tidak terlalu sering (bisa menyebabkan pengguna memilih password lemah yang mudah diingat).
- Password blacklist - Tolak password yang umum atau bocor (menggunakan database seperti Have I Been Pwned).
- Password hashing - Gunakan algoritma modern (Argon2, bcrypt, scrypt) dengan salt unik per pengguna.
Brute Force Protection
Serangan brute force mencoba menebak password dengan mengulang percobaan login. Strategi mitigasi:
- Rate Limiting - Membatasi jumlah percobaan login dari alamat IP atau akun dalam periode waktu tertentu (misal 5 percobaan per menit).
- Account Lockout - Mengunci akun sementara setelah sejumlah percobaan gagal (misal 10 percobaan gagal, kunci 15 menit).
- CAPTCHA - Meminta pengguna menyelesaikan tantangan setelah percobaan login gagal berulang kali.
- Progressive Delay - Menambah waktu tunggu secara eksponensial setelah setiap percobaan gagal.
- Multi-Factor Authentication - MFA secara drastis mengurangi efektivitas brute force karena penyerang juga perlu faktor kedua.
Kombinasi teknik-teknik ini memberikan pertahanan berlapis terhadap serangan brute force dan credential stuffing.