Apa Itu Autentikasi? Login, Sesi, dan OAuth Dijelaskan
Autentikasi adalah cara aplikasi memastikan siapa penggunanya, biasanya dengan memeriksa sesuatu yang diketahui pengguna (password), sesuatu yang dimiliki pengguna (kode yang dikirim ke ponsel atau email mereka), atau identitas dari layanan tepercaya lain (seperti "Sign in with Google"). Setelah pengguna terautentikasi, aplikasi mengingatnya dengan sesi atau token supaya ia tidak perlu login di setiap halaman. Menentukan apa yang boleh dilakukan pengguna yang sudah dikenal itu adalah langkah terpisah yang disebut otorisasi.
Mengapa ini penting saat membangun dengan AI
Menambahkan login adalah salah satu permintaan paling umum kepada AI builder, dan salah satu yang paling mudah keliru secara halus. Halaman login sederhana untuk dibuat. Bagian yang sulit adalah semua yang ada di sekitarnya:
- Apakah password disimpan dengan aman?
- Apakah setiap halaman privat dan setiap endpoint API benar-benar memeriksa siapa yang meminta?
- Bisakah customer yang sudah login melihat data customer lain dengan mengubah angka di URL?
- Apa yang terjadi ketika seseorang lupa password?
Aplikasi bisa tampak sangat aman padahal gagal di semua poin itu. Memahami bagian-bagian yang bergerak membantumu mengajukan pertanyaan yang tepat dan menguji hal yang tepat.
Analogi sehari-hari
Bayangkan saat check-in di hotel.
Di meja resepsionis kamu menunjukkan KTP. Itulah autentikasi: membuktikan siapa kamu. Resepsionis lalu memberimu kartu akses. Kartu itu adalah sesi-mu: selama menginap kamu tidak perlu menunjukkan KTP lagi; kamu cukup menempelkan kartu.
Kartu itu membuka kamarmu, gym, dan lift ke lantai kamu, tetapi tidak membuka kamar tamu lain atau ruang staf. Itulah otorisasi: apa yang boleh diakses identitasmu. Jika kartu hilang, hotel bisa menonaktifkannya di meja resepsionis (mencabut sesi). Saat check-out, kartu berhenti berfungsi (logout, atau kedaluwarsa).
"Sign in with Google" seperti hotel yang menerima surat dari mitra tepercaya yang menyatakan "ini orangnya", alih-alih memeriksa KTP kamu sendiri.
Metode login utama
| Metode | Cara kerja | Kelebihan | Kekurangan |
|---|---|---|---|
| Email + password | Pengguna memilih password; aplikasi menyimpan hash-nya | Sudah familiar, tidak bergantung pada layanan luar | Hash harus disimpan dengan aman dan reset harus ditangani |
| Magic link / kode sekali pakai | Aplikasi mengirim tautan atau kode lewat email untuk login | Tidak ada password yang bisa bocor atau terlupakan | Bergantung pada pengiriman email; login lebih lambat |
| Login sosial (OAuth / OpenID Connect) | Pengguna login dengan Google, Apple, GitHub, dll. | Cepat bagi pengguna; kamu tidak menyimpan password | Perlu setup di setiap penyedia; pengguna yang tidak punya akun tersebut |
| Penyedia autentikasi hosted | Layanan seperti Clerk, Auth0, atau Supabase Auth menangani sign-up, login, dan reset | Pekerjaan keamanan lebih sedikit untukmu | Biaya bulanan saat skala besar; dependensi tambahan |
| Multi-factor (MFA / 2FA) | Pemeriksaan kedua setelah yang pertama, misalnya kode dari aplikasi authenticator | Jauh lebih sulit untuk dibobol | Sedikit lebih merepotkan |
Cara password seharusnya disimpan
Aplikasi yang aman tidak pernah menyimpan password aslimu. Sebagai gantinya, ia menyimpan hash: hasil dari fungsi satu arah yang mengubah password menjadi string tetap. Saat kamu login, aplikasi meng-hash apa yang kamu ketik lalu membandingkan hasilnya dengan hash yang tersimpan.
Dua detail membuat cara ini aman:
- Salt: nilai acak yang ditambahkan ke setiap password sebelum di-hash, sehingga dua orang dengan password yang sama mendapat hash yang berbeda, dan tabel pencarian yang sudah dihitung sebelumnya menjadi tidak berguna.
- Algoritma lambat yang dibuat khusus untuk password, seperti Argon2, bcrypt, atau scrypt. Hash tujuan umum seperti MD5 atau SHA-256 terlalu cepat jika berdiri sendiri; penyerang bisa mencoba miliaran tebakan.
Hashing tidak sama dengan enkripsi. Data terenkripsi bisa didekripsi dengan kunci; hash password dirancang agar tidak bisa dibalik sama sekali.
Sesi vs token
Setelah login, aplikasi perlu mengenalimu pada setiap permintaan. Ada dua pendekatan umum.
| Sesi (cookie) | Token (mis. JWT) | |
|---|---|---|
| Yang disimpan browser | ID sesi acak dalam cookie | Token bertanda tangan yang berisi info pengguna dan waktu kedaluwarsa |
| Tempat status login disimpan | Di server, dalam database atau penyimpanan | Di dalam token itu sendiri |
| Mengeluarkan seseorang dari semua perangkat | Mudah: hapus sesinya di server | Lebih sulit: token tetap berlaku sampai kedaluwarsa kecuali kamu menyimpan daftar blokir |
| Penggunaan umum | Aplikasi web tradisional | API, aplikasi mobile, layanan yang saling berkomunikasi |
Untuk cookie, tiga pengaturan penting: HttpOnly (JavaScript di halaman tidak bisa membaca cookie), Secure (hanya dikirim lewat HTTPS), dan SameSite (membatasi pengiriman pada permintaan dari situs lain). Menyimpan token di localStorage browser itu umum, tetapi membuatnya terbuka bagi script apa pun yang berjalan di halaman.
OAuth dan "Sign in with Google"
OAuth 2.0 adalah standar untuk otorisasi yang didelegasikan: standar ini memungkinkan aplikasi mendapatkan akses terbatas ke akunmu di layanan lain, misalnya membaca Google Calendar-mu, tanpa pernah melihat password Google kamu. Kamu diarahkan ke Google, menyetujui izin tertentu (disebut scope), dan Google memberi aplikasi token hanya untuk izin tersebut.
OAuth sendiri dirancang untuk memberi akses, bukan untuk menyatakan siapa kamu. OpenID Connect (OIDC) adalah lapisan di atas OAuth 2.0 yang menambahkan identitas, dan inilah yang dipakai "Sign in with Google" atau "Sign in with Apple". Untuk menyiapkannya, kamu mendaftarkan aplikasi ke penyedia dan mendapatkan client ID serta client secret; secret tetap berada di server kamu.
Contoh nyata: login untuk portal klien
Anggaplah kamu membangun portal tempat klien sebuah agensi desain melihat project dan invoice mereka.
- Autentikasi: klien login dengan email dan magic link, sehingga tidak ada password yang perlu dikelola. Staf agensi login dengan akun Google Workspace.
- Peran: setiap pengguna punya peran, yaitu
clientataustaff. - Aturan otorisasi:
| Aksi | Klien | Staf |
|---|---|---|
| Melihat project perusahaannya sendiri | Ya | Ya |
| Melihat project perusahaan lain | Tidak | Ya |
| Mengunggah file ke project | Hanya project sendiri | Ya |
| Menandai invoice sebagai lunas | Tidak | Ya |
- Tempat penegakannya: di server, untuk setiap permintaan. Server mencari pengguna yang sedang login, lalu hanya mengembalikan project di mana
project.company_idcocok dengan perusahaan pengguna tersebut. Menyembunyikan tombol "Tandai lunas" saja tidak cukup; endpoint-nya sendiri harus menolak.
Istilah penting
| Istilah | Artinya |
|---|---|
| Autentikasi (AuthN) | Memastikan siapa seseorang. |
| Otorisasi (AuthZ) | Memutuskan apa yang boleh dia lakukan. |
| Sesi | Aplikasi yang mengingat bahwa kamu sudah login, di antara beberapa permintaan. |
| Cookie | Sepotong data kecil yang dikirim kembali browser ke situs pada setiap permintaan. |
| JWT | JSON Web Token: token ringkas yang bertanda tangan dan membawa klaim seperti ID pengguna dan waktu kedaluwarsa. |
| Peran / izin | Label seperti admin atau member yang menentukan akses. |
| MFA / 2FA | Mewajibkan bukti kedua, seperti kode dari aplikasi authenticator. |
| SSO | Single sign-on: satu login (sering akun perusahaan) untuk banyak aplikasi. |
| 401 vs 403 | "Kamu siapa?" (belum terautentikasi) vs "Kamu tidak boleh melakukan itu" (tidak terotorisasi). |
Kesalahan dan kesalahpahaman umum
- Memeriksa izin hanya di halaman. Jika browser menyembunyikan tombol tetapi API tidak memeriksa, siapa pun bisa memanggil API secara langsung.
- Mempercayai ID dari URL.
/invoices/1042harus memeriksa bahwa invoice 1042 milik pengguna yang sedang login. - Membuat kriptografi sendiri. Gunakan library atau penyedia yang sudah dikenal; jangan biarkan AI menciptakan skema hashing sendiri.
- Reset password yang lemah. Tautan reset sebaiknya sekali pakai, cepat kedaluwarsa, dan tidak mengungkapkan apakah sebuah email punya akun.
- Mencampuradukkan login aplikasimu dengan login builder-mu. Pengguna aplikasimu terpisah dari akunmu di alat yang kamu pakai untuk membangun.
- Tidak ada pembatasan laju pada login. Tanpa itu, penyerang bisa terus mencoba password.
Yang bisa kamu minta dari AI builder
- "Tambahkan sign-up dan login menggunakan [library atau penyedia yang sudah dikenal]. Jangan tulis hashing password sendiri."
- "Simpan password dalam bentuk hash dengan bcrypt atau Argon2."
- "Gunakan cookie HttpOnly dan Secure untuk sesi."
- "Tambahkan peran: admin dan member. Daftarkan setiap endpoint dan peran mana yang boleh memanggilnya."
- "Pastikan di server bahwa pengguna hanya bisa membaca dan mengubah data miliknya sendiri. Lalu tunjukkan bagaimana kamu memeriksanya."
- "Tambahkan reset password dengan tautan sekali pakai yang kedaluwarsa dalam satu jam."
- "Batasi laju percobaan login."
Lalu uji sendiri: buat dua akun dan coba akses data salah satu akun saat login sebagai akun lainnya. Panduan kami tentang menambahkan login dan checklist keamanan membahas lebih jauh.
Autentikasi di Mythex
Mythex tidak menyediakan produk autentikasi bawaan untuk pengguna aplikasimu; kamu memilih pendekatannya, yaitu email dan password yang disimpan di database project, atau SDK dari penyedia hosted, lalu meminta agent untuk menambahkannya. Key penyedia disimpan sebagai secret project, bukan di chat. Ini terpisah dari cara kamu login ke Mythex itu sendiri. Resep dokumentasi tentang menambahkan login ke aplikasi memiliki starter prompt yang bisa kamu sesuaikan, dan apa itu API menjelaskan di mana pemeriksaan sisi server tersebut berada.
Pertanyaan
Apa perbedaan antara autentikasi dan otorisasi?
Autentikasi memeriksa siapa kamu, misalnya dengan memverifikasi password. Otorisasi memutuskan apa yang boleh kamu lakukan setelah identitasmu diketahui, misalnya apakah kamu boleh melihat halaman admin atau mengubah booking orang lain. Aplikasi membutuhkan keduanya.
Apa itu OAuth?
OAuth 2.0 adalah standar yang memungkinkan aplikasi mendapatkan akses terbatas ke akunmu di layanan lain tanpa melihat password kamu. 'Sign in with Google' menggunakan OpenID Connect, sebuah lapisan identitas yang dibangun di atas OAuth 2.0, sehingga aplikasi mengetahui siapa kamu dari Google.
Apakah aplikasi saya boleh menyimpan password?
Jangan pernah dalam bentuk yang bisa dibaca. Jika kamu memakai login email dan password, password harus disimpan sebagai hash dengan salt, dibuat dengan algoritma lambat yang dirancang khusus untuk password, seperti Argon2 atau bcrypt. Banyak aplikasi menghindari masalah ini dengan memakai penyedia autentikasi hosted, login sosial, atau magic link lewat email.
Sesi atau token, mana yang sebaiknya dipakai aplikasi saya?
Keduanya bisa dipakai. Sesi menyimpan status login di server dan memberi browser sebuah ID acak dalam cookie, yang mudah dicabut. Token seperti JWT membawa informasi bertanda tangan di dalamnya sendiri, cocok untuk API dan klien mobile, tetapi lebih sulit dibatalkan sebelum kedaluwarsa. Untuk aplikasi web yang umum, sesi berbasis cookie adalah pilihan default yang baik.