Autentikasi adalah pintu utama sebuah aplikasi. Tanpa sistem login yang benar, data pengguna bisa bocor dan aplikasi mudah disalahgunakan. Sayangnya, banyak developer pemula langsung menulis kode login tanpa memikirkan keamanan.
Artikel ini membahas cara membuat autentikasi pengguna pada aplikasi web secara bertahap, mulai dari konsep dasar hingga praktik aman. Pembahasannya juga kami kaitkan dengan aplikasi Android, karena banyak proyek kini memakai satu backend untuk web dan mobile.
Apa Itu Autentikasi dan Mengapa Penting?
Autentikasi adalah proses memastikan bahwa pengguna yang masuk benar-benar orang yang dia klaim. Berbeda dengan otorisasi yang mengatur apa yang boleh dilakukan pengguna setelah masuk.
Bayangkan sebuah aplikasi catatan. Autentikasi memastikan hanya pemilik akun yang bisa membuka catatan, sedangkan otorisasi menentukan apakah ia boleh mengedit atau hanya membaca. Keduanya harus berjalan bersama.
Ada beberapa metode autentikasi yang umum dipakai:
- Sesi berbasis cookie — server menyimpan status login, browser menyimpan cookie.
- Token (JWT) — server memberi token yang dikirim di setiap request, cocok untuk API dan aplikasi Android.
- OAuth / login pihak ketiga — masuk memakai akun Google, Facebook, atau Apple.
- Passwordless — login lewat tautan email atau kode OTP.
Untuk aplikasi web modern yang juga punya versi Android, pendekatan token sering jadi pilihan karena lebih fleksibel.
Persiapan Sebelum Menulis Kode
Sebelum mulai, tentukan dulu kebutuhan aplikasi Anda. Apakah cukup login email dan password, atau perlu verifikasi nomor HP? Apakah akan ada fitur “lupa password”?
Selanjutnya siapkan stack yang akan dipakai. Berikut pilihan yang paling umum:
- Backend sendiri — Node.js/Express, Laravel, Django, atau Next.js API Routes.
- Database — PostgreSQL atau MySQL untuk menyimpan data pengguna.
- Library autentikasi — bcrypt/argon2 untuk hash password, jsonwebtoken untuk token.
- Layanan siap pakai — Firebase Authentication, Supabase Auth, Auth0, atau Clerk.
Jika Anda baru memulai, layanan siap pakai seperti Firebase Auth bisa menghemat waktu. Anda tetap bisa mengontrol data pengguna di database sendiri bila memakai Supabase.
Langkah-Langkah Membuat Autentikasi Pengguna
1. Rancang Skema Tabel Pengguna
Buat tabel users dengan kolom minimal id, email, password_hash, dan created_at. Pastikan kolom email memiliki indeks unik agar tidak ada akun ganda.
Jangan pernah menyimpan password dalam bentuk teks biasa. Simpan hanya hasil hash beserta salt-nya.
2. Buat Endpoint Registrasi
Endpoint registrasi menerima email dan password, lalu memvalidasi formatnya. Setelah valid, hash password dengan bcrypt atau argon2 sebelum disimpan.
Tambahkan validasi panjang password minimal 8 karakter dan cek apakah email sudah terdaftar. Kirim respons yang jelas, tetapi jangan membocorkan apakah email tertentu sudah ada jika aplikasi Anda bersifat sensitif.
3. Buat Endpoint Login
Pada login, ambil data pengguna berdasarkan email, lalu bandingkan password yang dikirim dengan hash menggunakan fungsi pembanding bawaan library. Jangan membandingkan string secara manual.
Jika cocok, buat sesi atau token. Untuk web berbasis server, simpan sesi di cookie dengan atribut HttpOnly, Secure, dan SameSite. Untuk API mobile, gunakan access token berumur pendek dan refresh token.
4. Lindungi Halaman dan Endpoint
Buat middleware yang memeriksa token atau sesi pada setiap request ke halaman privat. Jika tidak valid, arahkan pengguna ke halaman login.
Terapkan juga pembatasan akses berbasis peran, misalnya admin dan pengguna biasa. Dengan begitu, autentikasi berjalan beriringan dengan otorisasi.
5. Sediakan Fitur Lupa Password
Fitur ini wajib ada agar pengguna tidak terkunci di luar akun. Gunakan token sekali pakai yang dikirim lewat email dan berlaku terbatas, misalnya 30 menit.
Setelah password diubah, batalkan semua sesi aktif agar perangkat lain harus login ulang. Ini penting jika akun sempat diakses orang lain.
Praktik Keamanan yang Sering Diabaikan
Banyak kebocoran data terjadi bukan karena algoritma yang lemah, tapi karena kelalaian kecil. Berikut poin yang wajib Anda perhatikan:
- Gunakan HTTPS di seluruh halaman, termasuk halaman login.
- Hash password dengan bcrypt, scrypt, atau argon2 — bukan MD5 atau SHA-1.
- Batasi percobaan login untuk mencegah serangan brute force.
- Aktifkan 2FA terutama untuk akun admin.
- Jangan simpan token di localStorage untuk aplikasi web sensitif; gunakan cookie HttpOnly.
- Log aktivitas login agar mudah diaudit jika ada kejanggalan.
Selain itu, perbarui library autentikasi secara berkala. Celah keamanan sering ditemukan pada versi lama yang belum dipatch.
Menghubungkan Autentikasi Web dengan Aplikasi Android
Jika Anda membangun aplikasi Android, autentikasi web bisa dipakai ulang melalui REST API. Aplikasi mengirim email dan password ke endpoint login, lalu menyimpan token dengan aman.
Di Android, gunakan EncryptedSharedPreferences atau Keystore untuk menyimpan token, bukan SharedPreferences biasa. Hindari menaruh kunci rahasia (secret key) di dalam aplikasi karena APK bisa dibongkar.
Alternatif yang lebih praktis adalah Firebase Authentication. Satu proyek Firebase bisa melayani login di web dan Android sekaligus, lengkap dengan verifikasi email dan login Google.
Kesimpulan
Membuat autentikasi pengguna pada aplikasi web bukan sekadar menyiapkan form login. Anda perlu merancang skema database, mengelola hash password, melindungi endpoint, dan menerapkan praktik keamanan dasar.
Mulailah dari versi sederhana: registrasi, login, logout, dan lupa password. Setelah stabil, tambahkan 2FA, login Google, dan pembatasan percobaan login. Jika ingin cepat, layanan seperti Firebase Auth atau Supabase bisa jadi jalan pintas yang aman.
Siap membangun sistem login yang aman? Coba mulai dari satu proyek kecil hari ini, lalu uji sendiri dengan mencoba login dari perangkat berbeda. Simpan artikel ini sebagai checklist, dan bagikan ke teman developer yang sedang belajar autentikasi. Kunjungi Solusitekno.id untuk tutorial teknologi dan review aplikasi Android lainnya.