Apa Itu Authentication? Log Masuk, Sesi dan OAuth Diterangkan
Authentication ialah cara aplikasi mengesahkan siapa pengguna — biasanya dengan menyemak sesuatu yang mereka tahu (kata laluan), sesuatu yang mereka ada (kod yang dihantar ke telefon atau e-mel mereka) atau identiti daripada perkhidmatan dipercayai lain (seperti “Log masuk dengan Google”). Selepas pengguna disahkan, aplikasi mengingati mereka dengan sesi atau token supaya mereka tidak perlu log masuk pada setiap halaman. Memutuskan apa yang pengguna yang diketahui itu dibenarkan lakukan ialah langkah berasingan yang dipanggil authorization.
Mengapa ia penting apabila anda membina dengan AI
Menambah log masuk ialah salah satu permintaan paling biasa kepada pembina AI, dan salah satu yang paling mudah tersilap. Halaman log masuk mudah dijana. Bahagian yang sukar ialah semua yang berada di sekelilingnya:
- Adakah kata laluan disimpan dengan selamat?
- Adakah setiap halaman peribadi dan setiap titik akhir API benar-benar menyemak siapa yang meminta?
- Bolehkah pelanggan yang telah log masuk melihat data pelanggan lain dengan menukar nombor dalam URL?
- Apa yang berlaku apabila seseorang terlupa kata laluan?
Sebuah aplikasi boleh kelihatan sangat selamat sambil gagal dalam semua perkara itu. Memahami bahagian-bahagian yang bergerak membolehkan anda bertanya soalan yang betul dan menguji perkara yang betul.
Analogi harian
Bayangkan anda mendaftar masuk ke hotel.
Di kaunter depan, anda menunjukkan kad pengenalan. Itulah authentication: membuktikan siapa anda. Kemudian penyambut tetamu memberi anda kad kunci. Kad itu ialah sesi anda: sepanjang penginapan, anda tidak perlu menunjukkan kad pengenalan lagi; anda hanya mengimbas kad itu.
Kad itu membuka bilik anda, gim dan lif ke tingkat anda — tetapi bukan bilik tetamu lain atau pejabat kakitangan. Itulah authorization: apa yang identiti anda dibenarkan akses. Jika anda kehilangan kad, hotel boleh menyahaktifkannya di kaunter (membatalkan sesi). Apabila anda daftar keluar, ia berhenti berfungsi (log keluar, atau tamat tempoh).
“Log masuk dengan Google” seperti hotel yang menerima surat daripada rakan kongsi yang dipercayai yang berkata “ini orangnya”, dan bukannya memeriksa kad pengenalan anda sendiri.
Kaedah log masuk utama
| Kaedah | Cara ia berfungsi | Kelebihan | Kekurangan |
|---|---|---|---|
| E-mel + kata laluan | Pengguna memilih kata laluan; aplikasi menyimpan hash-nya | Biasa, tiada kebergantungan luaran | Anda mesti menyimpan hash dengan selamat dan mengendalikan tetapan semula |
| Pautan ajaib / kod sekali guna | Aplikasi menghantar pautan atau kod melalui e-mel untuk log masuk pengguna | Tiada kata laluan untuk bocor atau dilupakan | Bergantung pada penghantaran e-mel; log masuk lebih perlahan |
| Log masuk sosial (OAuth / OpenID Connect) | Pengguna log masuk dengan Google, Apple, GitHub dan lain-lain | Pantas untuk pengguna; anda tidak menyimpan kata laluan | Persediaan dengan setiap pembekal; pengguna yang tiada akaun tersebut |
| Pembekal auth yang dihoskan | Perkhidmatan seperti Clerk, Auth0 atau Supabase Auth mengendalikan pendaftaran, log masuk dan tetapan semula | Kerja keselamatan kurang untuk anda | Kos bulanan apabila skala membesar; satu lagi kebergantungan |
| Pelbagai faktor (MFA / 2FA) | Semakan kedua selepas yang pertama, seperti kod aplikasi pengesah | Jauh lebih sukar untuk dipecah masuk | Sedikit lebih banyak langkah |
Cara kata laluan patut disimpan
Aplikasi yang selamat tidak pernah menyimpan kata laluan sebenar anda. Sebaliknya, ia menyimpan hash: output fungsi sehala yang menukar kata laluan kepada rentetan tetap. Apabila anda log masuk, aplikasi mencincang apa yang anda taip dan membandingkan hasilnya dengan hash yang disimpan.
Dua butiran menjadikan ini selamat:
- Salt (garam) — nilai rawak yang ditambah pada setiap kata laluan sebelum dicincang, supaya dua orang dengan kata laluan sama mendapat hash yang berbeza, dan jadual carian yang telah dikira menjadi tidak berguna.
- Algoritma perlahan yang direka untuk kata laluan — seperti Argon2, bcrypt atau scrypt. Hash tujuan umum seperti MD5 atau SHA-256 terlalu pantas dengan sendirinya; penyerang boleh mencuba berbilion tekaan.
Hashing tidak sama dengan penyulitan. Data yang disulitkan boleh dinyahsulitkan dengan kunci; hash kata laluan direka supaya tidak boleh dibalikkan sama sekali.
Sesi vs token
Selepas log masuk, aplikasi perlu mengenali anda pada setiap permintaan. Terdapat dua pendekatan biasa.
| Sesi (kuki) | Token (cth. JWT) | |
|---|---|---|
| Apa yang dipegang pelayar | ID sesi rawak dalam kuki | Token yang ditandatangani mengandungi maklumat pengguna dan tarikh tamat |
| Di mana keadaan log masuk disimpan | Di pelayan, dalam pangkalan data atau storan | Di dalam token itu sendiri |
| Log keluar seseorang di semua peranti | Mudah: padam sesi di pelayan | Lebih sukar: token kekal sah sehingga tamat tempoh melainkan anda menyimpan senarai sekatan |
| Penggunaan biasa | Aplikasi web tradisional | API, aplikasi mudah alih, perkhidmatan yang berkomunikasi antara satu sama lain |
Untuk kuki, tiga tetapan penting: HttpOnly (JavaScript pada halaman tidak boleh membaca kuki), Secure (dihantar hanya melalui HTTPS) dan SameSite (menghadkan penghantarannya pada permintaan dari laman lain). Menyimpan token dalam localStorage pelayar adalah biasa, tetapi ia mendedahkan token kepada mana-mana skrip yang berjalan pada halaman itu.
OAuth dan “Log masuk dengan Google”
OAuth 2.0 ialah standard untuk delegated authorization: ia membolehkan aplikasi mendapat akses terhad kepada akaun anda di perkhidmatan lain — contohnya membaca Kalendar Google anda — tanpa pernah melihat kata laluan Google anda. Anda dihantar ke Google, anda meluluskan kebenaran tertentu (dipanggil scopes), dan Google memberi aplikasi itu token untuk kebenaran tersebut sahaja.
OAuth sahaja direka untuk memberi akses, bukan untuk memberitahu siapa anda. OpenID Connect (OIDC) ialah lapisan di atas OAuth 2.0 yang menambah identiti, dan itulah yang digunakan oleh “Log masuk dengan Google” atau “Log masuk dengan Apple”. Untuk menyediakannya, anda mendaftarkan aplikasi dengan pembekal dan mendapat client ID serta client secret; secret itu kekal di pelayan anda.
Contoh kerja: log masuk untuk portal pelanggan
Katakan anda sedang membina portal tempat pelanggan sebuah agensi reka bentuk melihat projek dan invois mereka.
- Authentication: pelanggan log masuk dengan e-mel dan pautan ajaib, jadi tiada kata laluan untuk diurus. Kakitangan agensi log masuk dengan akaun Google Workspace.
- Peranan: setiap pengguna mempunyai peranan —
clientataustaff. - Peraturan authorization:
| Tindakan | Pelanggan | Kakitangan |
|---|---|---|
| Melihat projek syarikat mereka sendiri | Ya | Ya |
| Melihat projek syarikat lain | Tidak | Ya |
| Memuat naik fail ke projek | Projek sendiri sahaja | Ya |
| Menandakan invois sebagai dibayar | Tidak | Ya |
- Di mana ia dikuatkuasakan: di pelayan, untuk setiap permintaan. Pelayan mencari pengguna yang log masuk, kemudian hanya memulangkan projek yang
project.company_id-nya sepadan dengan syarikat pengguna. Menyembunyikan butang “Tandakan dibayar” tidak mencukupi — titik akhir itu sendiri mesti menolak.
Istilah biasa dijelaskan
| Istilah | Maksud |
|---|---|
| Authentication (AuthN) | Mengesahkan siapa seseorang. |
| Authorization (AuthZ) | Memutuskan apa yang mereka boleh lakukan. |
| Sesi | Aplikasi mengingati bahawa anda sedang log masuk, antara permintaan. |
| Kuki | Sedikit data yang dihantar semula oleh pelayar kepada laman itu pada setiap permintaan. |
| JWT | JSON Web Token: token ringkas yang ditandatangani dan membawa tuntutan seperti ID pengguna dan tarikh tamat. |
| Peranan / kebenaran | Label seperti admin atau member yang menentukan akses. |
| MFA / 2FA | Memerlukan bukti kedua, seperti kod daripada aplikasi pengesah. |
| SSO | Single sign-on: satu log masuk (selalunya akaun syarikat) untuk banyak aplikasi. |
| 401 vs 403 | “Siapa anda?” (tidak disahkan) berbanding “Anda tidak boleh buat itu” (tidak diberi kuasa). |
Kesilapan dan salah faham yang biasa
- Menyemak kebenaran hanya di halaman. Jika pelayar menyembunyikan butang tetapi API tidak menyemak, sesiapa sahaja boleh memanggil API secara langsung.
- Mempercayai ID daripada URL.
/invoices/1042mesti menyemak bahawa invois 1042 tergolong kepada pengguna yang log masuk. - Mencipta kriptografi sendiri. Gunakan pustaka atau pembekal yang terkenal; jangan biarkan AI mereka-reka skema cincang sendiri.
- Tetapan semula kata laluan yang lemah. Pautan tetapan semula patut sekali guna, tamat tempoh dengan cepat dan tidak mendedahkan sama ada e-mel mempunyai akaun.
- Mengelirukan log masuk anda dengan log masuk pembina anda. Pengguna aplikasi anda berasingan daripada akaun anda di alat yang anda gunakan untuk membina.
- Tiada had kadar (rate limiting) pada log masuk. Tanpanya, penyerang boleh mencuba kata laluan tanpa henti.
Apa nak minta daripada pembina AI anda
- “Tambah pendaftaran dan log masuk menggunakan [pustaka atau pembekal yang terkenal]. Jangan tulis cincang kata laluan sendiri.”
- “Simpan kata laluan yang dicincang dengan bcrypt atau Argon2.”
- “Gunakan kuki sesi HttpOnly dan Secure.”
- “Tambah peranan: admin dan member. Senaraikan setiap titik akhir dan peranan mana yang boleh memanggilnya.”
- “Kuatkuasakan di pelayan bahawa pengguna hanya boleh membaca dan mengedit rekod mereka sendiri. Kemudian tunjukkan cara anda menyemaknya.”
- “Tambah tetapan semula kata laluan dengan pautan sekali guna yang tamat tempoh dalam satu jam.”
- “Hadkan kadar percubaan log masuk.”
Kemudian uji sendiri: cipta dua akaun dan cuba capai data satu akaun semasa log masuk sebagai akaun yang lain. Panduan kami cara menambah log masuk dan senarai semak keselamatan memberi butiran lanjut.
Authentication dalam Mythex
Mythex tidak menyediakan produk auth terbina dalam untuk pengguna aplikasi anda; anda memilih pendekatan — e-mel dan kata laluan yang disimpan dalam pangkalan data projek anda, atau SDK pembekal yang dihoskan — dan meminta ejen menambahkannya. Kunci pembekal diletakkan dalam rahsia projek, bukan dalam sembang. Ini berasingan daripada cara anda log masuk ke Mythex itu sendiri. Resipi dokumen mengenai menambah log masuk pada aplikasi anda mempunyai arahan permulaan yang boleh anda sesuaikan, dan apa itu API menerangkan di mana semakan pelayan tersebut berada.
Soalan lazim
Apakah perbezaan antara authentication dan authorization?
Authentication menyemak siapa anda, contohnya dengan mengesahkan kata laluan anda. Authorization memutuskan apa yang anda dibenarkan lakukan selepas identiti anda diketahui, seperti sama ada anda boleh melihat halaman pentadbir atau mengedit tempahan orang lain. Aplikasi memerlukan kedua-duanya.
Apakah OAuth?
OAuth 2.0 ialah standard yang membolehkan aplikasi mendapat akses terhad kepada akaun anda di perkhidmatan lain tanpa melihat kata laluan anda. “Log masuk dengan Google” menggunakan OpenID Connect, lapisan identiti yang dibina di atas OAuth 2.0, supaya aplikasi tahu siapa anda melalui Google.
Patutkah aplikasi saya menyimpan kata laluan?
Jangan sekali-kali dalam bentuk yang boleh dibaca. Jika anda menggunakan log masuk e-mel dan kata laluan, kata laluan mesti disimpan sebagai hash bergaram yang dihasilkan dengan algoritma perlahan yang direka khas untuk kata laluan, seperti Argon2 atau bcrypt. Ramai aplikasi mengelak isu ini dengan menggunakan pembekal auth yang dihoskan, log masuk sosial atau pautan ajaib e-mel.
Sesi atau token — yang mana patut digunakan aplikasi saya?
Kedua-duanya berfungsi. Sesi menyimpan keadaan log masuk di pelayan dan memberi pelayar satu ID rawak dalam kuki, yang mudah dibatalkan. Token seperti JWT membawa maklumat yang ditandatangani di dalamnya sendiri, sesuai untuk API dan klien mudah alih, tetapi lebih sukar dibatalkan sebelum tamat tempoh. Untuk aplikasi web biasa, sesi berasaskan kuki ialah pilihan lalai yang munasabah.