Cara Kerja Sistem Login dan Autentikasi pada Aplikasi Web
Apa Itu Autentikasi?
Autentikasi adalah proses untuk memastikan siapa pengguna yang sedang mengakses aplikasi.
Contohnya:
User
↓
Email + Password
↓
Authentication
↓
User Terverifikasi
↓
Login BerhasilAutentikasi menjawab pertanyaan:
"Siapa Anda?"
Apa Itu Authorization?
Authorization berbeda dengan authentication.
Authorization menentukan apa yang boleh dilakukan oleh pengguna.
Contohnya:
Authentication
↓
Siapa Anda?
Authorization
↓
Apa yang Boleh Anda Lakukan?Misalnya:
Admin
✓ Kelola User
✓ Kelola Produk
✓ Lihat Laporan
Staff
✗ Kelola User
✓ Kelola Produk
✓ Lihat LaporanAlur Login Secara Sederhana
Proses login biasanya:
User
↓
Form Login
↓
Email + Password
↓
Server
↓
Validasi
↓
Database
↓
Password Verification
↓
Session / Token
↓
Dashboard1. User Membuka Halaman Login
User mengakses:
https://example.com/loginServer menampilkan form:
Email
Password
[ Login ]2. User Mengisi Kredensial
Contohnya:
Email:
user@example.com
Password:
********Ketika tombol Login ditekan, browser mengirim request ke server.
POST /login
↓
Server3. Server Menerima Request
Server menerima data:
{
"email": "user@example.com",
"password": "********"
}Password tidak boleh disimpan atau ditampilkan dalam bentuk plaintext di database.
4. Validasi Input
Server memeriksa apakah data yang dikirim valid.
Contohnya:
Email
↓
Format Valid?
Password
↓
Tidak Kosong?Jika tidak valid:
Validation Error
↓
Kembali ke Login5. Mencari User di Database
Server mencari akun berdasarkan email atau username.
Contohnya:
SELECT *
FROM users
WHERE email = 'user@example.com';Jika user tidak ditemukan:
User Tidak Ditemukan
↓
Login Gagal6. Password Verification
Password di database seharusnya disimpan dalam bentuk hash.
Contohnya:
Password Asli
↓
Hash Function
↓
Password HashDatabase menyimpan:
$2y$10$................................Saat login:
Password User
↓
Verify Hash
↓
Cocok?Jika cocok:
Login BerhasilJika tidak:
Login GagalJangan Menyimpan Password Plaintext
Jangan menyimpan:
password = "123456"Gunakan password hashing seperti:
bcrypt
Argon2Password hash dirancang agar password asli tidak perlu disimpan.
7. Membuat Session
Setelah login berhasil, aplikasi dapat membuat session.
Alurnya:
Login Berhasil
↓
Create Session
↓
Session ID
↓
BrowserBrowser kemudian menyimpan cookie session.
Contohnya:
Cookie
↓
session_id=abc123...Apa Itu Session?
Session adalah mekanisme untuk mempertahankan status login pengguna selama beberapa request.
Tanpa session:
Request 1
↓
Login
Request 2
↓
Server Tidak Tahu UserDengan session:
Login
↓
Session
↓
Request
↓
Server Mengenali User8. Cookie pada Browser
Cookie digunakan browser untuk menyimpan informasi tertentu yang diperlukan aplikasi.
Contohnya:
Browser
↓
Cookie
↓
Session IDCookie yang aman biasanya menggunakan:
HttpOnly
Secure
SameSiteKonfigurasi tepat bergantung pada arsitektur aplikasi.
Apa Itu HttpOnly?
Cookie HttpOnly tidak dapat diakses langsung oleh JavaScript pada browser.
Ini membantu mengurangi risiko pencurian cookie melalui serangan tertentu seperti XSS.
Apa Itu Secure?
Cookie Secure hanya dikirim melalui koneksi HTTPS.
HTTPS
↓
Secure CookieUntuk production, HTTPS sangat penting.
Apa Itu SameSite?
SameSite membantu mengontrol kapan cookie dikirim pada konteks cross-site.
Konfigurasinya dapat berupa:
Strict
Lax
NonePemilihannya harus disesuaikan dengan kebutuhan aplikasi.
Session-Based Authentication
Arsitektur sederhananya:
Browser
↓
Login
↓
Server
↓
Session
↓
CookiePada request berikutnya:
Browser
↓
Cookie
↓
Server
↓
Session
↓
UserToken-Based Authentication
Selain session, aplikasi dapat menggunakan token.
Contohnya:
Login
↓
Server
↓
Access Token
↓
ClientKemudian:
Client
↓
Authorization Header
↓
APIContohnya:
Authorization: Bearer <token>Session vs Token
Session:
✓ Cocok untuk Web App
✓ Cookie-based
✓ Mudah digunakan dengan browser
✓ Server mengelola sessionToken:
✓ Cocok untuk API
✓ Mobile App
✓ SPA
✓ Integrasi antar aplikasiPemilihan tergantung arsitektur.
Authentication untuk REST API
API dapat menggunakan token:
POST /api/login
↓
Access Token
↓
ClientRequest berikutnya:
GET /api/profile
Authorization: Bearer TOKENServer memvalidasi token tersebut.
JWT Authentication
JWT atau JSON Web Token merupakan salah satu mekanisme token-based authentication.
Konsepnya:
Login
↓
JWT
↓
Client
↓
API Request
↓
Verify JWTJWT biasanya memiliki tiga bagian:
Header
.
Payload
.
SignatureJWT bukan berarti selalu lebih aman daripada session. Keamanan bergantung pada bagaimana token dibuat, disimpan, divalidasi, dan dicabut.
Laravel Authentication
Laravel menyediakan berbagai komponen untuk authentication.
Alurnya:
Laravel
↓
Login
↓
Authentication
↓
Session
↓
Middleware
↓
Protected RouteContohnya:
Route
↓
auth middleware
↓
DashboardJika user belum login:
Request
↓
auth middleware
↓
Belum Login
↓
Login PageLaravel Sanctum
Untuk aplikasi Laravel yang membutuhkan API authentication, Laravel Sanctum dapat digunakan pada skenario tertentu.
Contohnya:
Mobile / SPA
↓
Laravel API
↓
Sanctum
↓
AuthenticationSanctum dapat digunakan untuk personal access token dan autentikasi berbasis cookie untuk SPA, tergantung arsitektur aplikasi.
Role dan Permission
Setelah authentication, aplikasi biasanya menentukan hak akses.
Contohnya:
User
↓
Authentication
↓
Role
↓
Permission
↓
AccessMisalnya:
Admin
↓
users.create
users.update
users.deleteSedangkan:
Staff
↓
users.viewMiddleware
Middleware dapat digunakan untuk membatasi akses.
Contohnya:
Request
↓
Authentication Middleware
↓
Authorization Middleware
↓
ControllerIni membantu memisahkan keamanan dari business logic utama.
Login dan Rate Limiting
Login endpoint harus dilindungi dari brute-force attack.
Contohnya:
Login Attempt
↓
Rate Limit
↓
Maximum Attempts
↓
Temporary BlockMisalnya sistem membatasi jumlah percobaan login dalam periode tertentu.
Multi-Factor Authentication
Untuk akun penting, dapat ditambahkan MFA.
Alurnya:
Email + Password
↓
OTP / Authenticator
↓
Verification
↓
LoginMFA dapat memberikan lapisan keamanan tambahan.
Forgot Password
Sistem login biasanya memiliki fitur reset password.
Alurnya:
Forgot Password
↓
Email
↓
Reset Token
↓
Reset Password
↓
Password BaruToken reset harus memiliki masa berlaku dan tidak boleh mudah ditebak.
Email Verification
Aplikasi juga dapat memverifikasi email:
Register
↓
Verification Email
↓
Click Link
↓
Email VerifiedFitur ini membantu memastikan alamat email benar-benar dimiliki pengguna.
Logout
Logout digunakan untuk mengakhiri sesi.
User
↓
Logout
↓
Session Destroy / Token Revoked
↓
Login PageUntuk token, mekanisme pencabutan bergantung pada jenis token dan arsitektur aplikasi.
Session Expiration
Session sebaiknya memiliki masa berlaku.
Contohnya:
Login
↓
Session
↓
Timeout
↓
Login AgainDurasi session harus disesuaikan dengan tingkat keamanan aplikasi.
Remember Me
Beberapa aplikasi memiliki:
☑ Remember MeFitur ini memungkinkan pengguna tetap login lebih lama.
Namun, harus diterapkan dengan mekanisme cookie/token yang aman.
HTTPS Sangat Penting
Login tidak seharusnya menggunakan HTTP biasa.
Gunakan:
Browser
↓
HTTPS
↓
ServerHTTPS mengenkripsi komunikasi antara browser dan server.
Jangan Percaya Data dari Browser
Browser dapat dimanipulasi oleh pengguna.
Contohnya:
role=adminJangan langsung mempercayainya.
Server harus mengambil informasi role dari sumber yang dipercaya.
Request
↓
Server
↓
Database / Session
↓
AuthorizationAuthentication Bukan Sekadar Login
Sistem authentication yang baik mencakup:
Login
Register
Password Hashing
Session
Token
Logout
Reset Password
Email Verification
MFA
Rate Limiting
AuthorizationSemua bagian tersebut saling berhubungan.
Contoh Alur Lengkap
User
↓
Login Page
↓
Email + Password
↓
HTTPS
↓
Server
↓
Validate Input
↓
Find User
↓
Verify Password
↓
Create Session / Token
↓
Authorization
↓
DashboardContoh Request Login
POST /login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password"
}Server memvalidasi dan mengembalikan session atau token sesuai arsitektur aplikasi.
Contoh Protected API
GET /api/profile
Authorization: Bearer TOKENServer:
Token
↓
Valid?
↓
User
↓
Permission
↓
ResponseKesalahan yang Harus Dihindari
Beberapa kesalahan umum:
✗ Password plaintext
✗ Tidak menggunakan HTTPS
✗ Tidak ada rate limiting
✗ Token tidak memiliki expiry
✗ Cookie tidak aman
✗ Authorization hanya di frontend
✗ Tidak ada MFA untuk akun kritis
✗ Session tidak di-invalidate saat logoutChecklist Sistem Login
✓ HTTPS
✓ Password hashing
✓ Input validation
✓ Session / Token
✓ Secure cookie
✓ Rate limiting
✓ Logout
✓ Password reset
✓ Email verification
✓ Authorization
✓ Role & Permission
✓ MFA
✓ Audit log
✓ Session expiration
✓ Security monitoringSistem Login Bersama Ovla Media
Ovla Media dapat membantu membangun sistem authentication dan authorization untuk aplikasi bisnis, seperti:
Login & Register.
Laravel Authentication.
Laravel Sanctum.
JWT Authentication.
Role & Permission.
Multi-Role User.
MFA / 2FA.
Password Reset.
Email Verification.
Session Management.
REST API Security.
Audit Log.
Rate Limiting.
Web Application Security.
Custom Web Application.
Sistem autentikasi dapat disesuaikan dengan kebutuhan aplikasi web, mobile app, API, SaaS, maupun aplikasi internal perusahaan.
Kesimpulan
Sistem login bukan hanya proses memasukkan email dan password.
Secara sederhana:
Login
↓
Validasi
↓
Password Verification
↓
Session / Token
↓
Authentication
↓
Authorization
↓
AccessAuthentication menentukan siapa pengguna, sedangkan authorization menentukan apa yang boleh dilakukan pengguna tersebut.
Untuk aplikasi modern, keamanan login perlu didukung dengan HTTPS, password hashing, secure session/token, rate limiting, role & permission, password recovery, dan MFA jika diperlukan.
Dengan sistem autentikasi yang dirancang dengan baik, aplikasi dapat memberikan akses kepada pengguna yang tepat sekaligus melindungi data dan fitur penting dari akses yang tidak sah.
Artikel Terkait
Apa Itu Interaction to Next Paint dan Bagaimana Cara Mengoptimalkannya?
Interaction to Next Paint (INP) adalah metrik Core Web Vitals yang mengukur seberapa cepat halaman website merespons interaksi pengguna seperti klik, tap, dan input keyboard. INP yang baik membuat website terasa lebih responsif dan nyaman digunakan.
Apa Itu Database Index dan Mengapa Penting untuk Performa Aplikasi?
Database Index adalah struktur khusus yang membantu database menemukan data dengan lebih cepat tanpa harus membaca seluruh isi tabel. Index sangat penting untuk aplikasi dengan jumlah data besar, terutama ketika query sering menggunakan kolom tertentu untuk pencarian, filtering, sorting, atau relationship. Namun, terlalu banyak index juga dapat meningkatkan penggunaan storage dan memperlambat proses INSERT, UPDATE, dan DELETE.
Native App vs Web App: Mana yang Lebih Cocok untuk Bisnis?
Native App dan Web App memiliki kelebihan masing-masing. Native App cocok untuk aplikasi yang membutuhkan akses fitur perangkat secara mendalam dan performa tinggi, sedangkan Web App lebih mudah diakses melalui browser dan lebih sederhana dalam distribusi serta maintenance. Pemilihan teknologi sebaiknya disesuaikan dengan kebutuhan pengguna, fitur aplikasi, budget, dan strategi bisnis.