Rokasgrāmatas

Kas ir autentifikācija? Pieteikšanās, sesijas un OAuth izskaidrots

Autentifikācija ir veids, kā lietotne apstiprina, kas ir lietotājs — parasti pārbaudot kaut ko, ko viņš zina (paroli), kaut ko, kam viņam ir piekļuve (kodu, kas nosūtīts uz tālruni vai e-pastu), vai identitāti no cita uzticama pakalpojuma (piemēram, „Pieteikties ar Google”). Kad lietotājs ir autentificēts, lietotne viņu atceras ar sesiju vai marķieri, lai viņam nevajadzētu pieteikties katrā lapā. Lēmums, ko šis zināmais lietotājs drīkst darīt, ir atsevišķs solis, ko sauc par autorizāciju.

Kāpēc tas ir svarīgi, veidojot ar MI

Pieteikšanās pievienošana ir viens no biežākajiem pieprasījumiem MI lietotņu veidotājam, un viens no vieglākajiem, ko nepamanot izdarīt nepareizi. Pieteikšanās lapu ir viegli ģenerēt. Grūtākais ir viss, kas to ieskauj:

  • Vai paroles tiek glabātas droši?
  • Vai katra privātā lapa un katrs API galapunkts tiešām pārbauda, kas pieprasa piekļuvi?
  • Vai pieteicies klients var redzēt cita klienta datus, mainot skaitli URL?
  • Kas notiek, kad kāds aizmirst paroli?

Lietotne var izskatīties pilnīgi droša, bet neizturēt nevienu no šīm pārbaudēm. Kad saprotat darbīgās daļas, varat uzdot pareizos jautājumus un pārbaudīt pareizās lietas.

Ikdienas salīdzinājums

Iedomājieties, ka reģistrējaties viesnīcā.

Pie reģistratūras jūs parādāt personas apliecinājumu. Tā ir autentifikācija: pierādīt, kas jūs esat. Administrators pēc tam jums izsniedz atslēgkarti. Šī karte ir jūsu sesija: visu uzturēšanās laiku jums vairs nav jārāda apliecinājums; jūs vienkārši piesienat karti.

Karte atver jūsu numuru, sporta zāli un lifta piekļuvi jūsu stāvam — bet ne citu viesu numurus vai personāla telpu. Tā ir autorizācija: kam jūsu identitātei ir atļauta piekļuve. Ja karti pazaudējat, viesnīca to var deaktivizēt pie galda (sesijas atsaukšana). Kad izrakstāties, karte pārstāj darboties (izrakstīšanās vai termiņa beigas).

„Pieteikties ar Google” ir kā viesnīca, kas pieņem uzticama partnera vēstuli ar apgalvojumu „šī ir tā persona”, nevis pārbauda jūsu apliecinājumu pati.

Galvenās pieteikšanās metodes

MetodeKā darbojasPlusiMīnusi
E-pasts + paroleLietotājs izvēlas paroli; lietotne glabā tās jaucējvērtībuPazīstama, nav ārējas atkarībasJums jāglabā jaucējvērtības droši un jārisina atiestatīšana
Burvju saite / vienreizējs kodsLietotne nosūta e-pastā saiti vai kodu, kas pieslēdz lietotājuNav paroļu, ko nopludināt vai aizmirstAtkarīgs no e-pasta piegādes; pieteikšanās ir lēnāka
Sociālā pieteikšanās (OAuth / OpenID Connect)Lietotājs pieslēdzas ar Google, Apple, GitHub u. c.Ātri lietotājiem; jūs neglabājat paroliUzstādīšana katram pakalpojumu sniedzējam; lietotāji bez šiem kontiem
Hostēts autentifikācijas pakalpojumsTāds pakalpojums kā Clerk, Auth0 vai Supabase Auth apstrādā reģistrāciju, pieteikšanos un atiestatīšanuMazāk drošības darba jumsMēneša maksa pie liela apjoma; vēl viena atkarība
Daudzfaktoru (MFA / 2FA)Otrreizēja pārbaude pēc pirmās, piemēram, autentifikatora lietotnes kodsDaudz grūtāk uzlauztNedaudz vairāk berzes

Kā jāglabā paroles

Droša lietotne nekad neglabā jūsu īsto paroli. Tā vietā tā glabā jaucējvērtību — vienvirziena funkcijas rezultātu, kas paroli pārvērš fiksētā virknē. Kad pieteicaties, lietotne jaucē ievadīto un salīdzina rezultātu ar saglabāto jaucējvērtību.

Divas detaļas padara to drošu:

  • Sāls — nejaušs vērtums, kas pievienots katrai parolei pirms jaukšanas, tāpēc diviem cilvēkiem ar vienādu paroli būs dažādas jaucējvērtības, un iepriekš sagatavotas meklēšanas tabulas nav noderīgas.
  • Lēns algoritms, kas paredzēts parolēm — piemēram, Argon2, bcrypt vai scrypt. Vispārīgas jaucējvērtības, piemēram, MD5 vai SHA-256, pašas par sevi ir pārāk ātras; uzbrucēji var izmēģināt miljardiem minējumu.

Jaukšana nav tas pats, kas šifrēšana. Šifrētus datus var atšifrēt ar atslēgu; paroles jaucējvērtība ir veidota tā, lai to nemaz nevarētu atgriezt.

Sesijas pret marķieriem

Pēc pieteikšanās lietotnei katrā pieprasījumā jāatpazīst jūs. Ir divas bieži lietotas pieejas.

Sesija (sīkdatne)Marķieris (piem., JWT)
Ko pārlūkprogramma glabāNejaušu sesijas ID sīkdatnēParakstītu marķieri ar lietotāja informāciju un termiņu
Kur atrodas pieteikšanās stāvoklisServerī, datubāzē vai glabātuvēPašā marķierī
Izrakstīt kādu visurVienkārši: dzēst sesiju serverīGrūtāk: marķieris paliek derīgs līdz termiņa beigām, ja nav bloķēšanas saraksta
Tipisks pielietojumsTradicionālas tīmekļa lietotnesAPI, mobilās lietotnes, pakalpojumi, kas sazinās savā starpā

Sīkdatnēm svarīgi ir trīs iestatījumi: HttpOnly (lapas JavaScript nevar nolasīt sīkdatni), Secure (sūta tikai pa HTTPS) un SameSite (ierobežo sūtīšanu pieprasījumos no citām vietnēm). Marķieru glabāšana pārlūkprogrammas localStorage ir izplatīta, taču tā tos pakļauj jebkuram skriptam, kas darbojas lapā.

OAuth un „Pieteikties ar Google”

OAuth 2.0 ir standarts deleģētai autorizācijai: tas ļauj lietotnei saņemt ierobežotu piekļuvi jūsu kontam citā pakalpojumā — teiksim, lasīt jūsu Google kalendāru — bez jebkādas iespējas redzēt jūsu Google paroli. Jūs tiekat novirzīts uz Google, apstiprināt konkrētas atļaujas (sauktas par scopes), un Google lietotnei izdod marķieri tikai šīm atļaujām.

OAuth pats par sevi tika veidots, lai piešķirtu piekļuvi, nevis lai paziņotu, kas jūs esat. OpenID Connect (OIDC) ir slānis virs OAuth 2.0, kas pievieno identitāti; tieši to izmanto „Pieteikties ar Google” vai „Pieteikties ar Apple”. Lai to uzstādītu, jūs reģistrējat lietotni pie pakalpojumu sniedzēja un saņemat klienta ID un klienta noslēpumu; noslēpums paliek jūsu serverī.

Praktisks piemērs: pieteikšanās klientu portālam

Pieņemsim, ka veidojat portālu, kur dizaina aģentūras klienti redz savus projektus un rēķinus.

  • Autentifikācija: klienti pieslēdzas ar e-pastu un burvju saiti, tāpēc nav paroļu, ko pārvaldīt. Aģentūras darbinieki pieslēdzas ar Google Workspace kontiem.
  • Lomas: katram lietotājam ir loma — client vai staff.
  • Autorizācijas noteikumi:
DarbībaKlientsDarbinieks
Redzēt savas kompānijas projektusJāJā
Redzēt citu kompāniju projektusNēJā
Augšupielādēt failu projektāTikai savos projektosJā
Atzīmēt rēķinu kā apmaksātuNēJā
  • Kur tas tiek ieviests: serverī, katrā pieprasījumā. Serveris atrod pieteikušos lietotāju un atgriež tikai tos projektus, kuros project.company_id sakrīt ar lietotāja kompāniju. Pogas „Atzīmēt kā apmaksātu” paslēpšana nav pietiekama — pats galapunkts jānoraida.

Izskaidroti biežākie termini

TerminsNozīme
Autentifikācija (AuthN)Apstiprināt, kas ir persona.
Autorizācija (AuthZ)Noteikt, ko persona drīkst darīt.
SesijaLietotne atceras, ka jūs esat pieteicies, starp pieprasījumiem.
SīkdatneNeliels datu gabals, ko pārlūkprogramma katrā pieprasījumā atsūta atpakaļ vietnei.
JWTJSON Web Token: parakstīts, kompakts marķieris, kas nes tādus apgalvojumus kā lietotāja ID un termiņš.
Loma / atļaujaNosaukumi, piemēram, admin vai member, kas nosaka piekļuvi.
MFA / 2FAPrasība pēc otra pierādījuma, piemēram, koda no autentifikatora lietotnes.
SSOVienotā pieteikšanās: viens pieteikums (bieži uzņēmuma kontā) daudzām lietotnēm.
401 pret 403„Kas jūs esat?” (nav autentificēts) pret „Jūs to nedrīkstat” (nav autorizēts).

Biežākās kļūdas un maldi

  • Atļauju pārbaude tikai lapā. Ja pārlūkprogramma paslēpj pogu, bet API nepārbauda, ikviens var izsaukt API tieši.
  • Uzticēšanās ID no URL. /invoices/1042 jāpārbauda, vai rēķins 1042 pieder pieteiktajam lietotājam.
  • Savas kriptogrāfijas veidošana. Izmantojiet labi zināmas bibliotēkas vai pakalpojumu sniedzējus; neļaujiet MI izgudrot jaukšanas shēmu.
  • Vāja paroles atiestatīšana. Atiestatīšanas saitēm jābūt vienreizējām, jābeidzas ātri un nedrīkst atklāt, vai e-pastam ir konts.
  • Pieteikšanās sajaukšana ar veidotāja pieteikšanos. Jūsu lietotnes lietotāji ir atsevišķi no jūsu konta rīkā, ar ko veidojat.
  • Nav pieteikšanās ierobežojuma. Bez tā uzbrucēji var nebeidzami mēģināt paroles.

Ko lūgt savam MI veidotājam

  • „Pievieno reģistrāciju un pieteikšanos, izmantojot [labi zināmu bibliotēku vai pakalpojumu sniedzēju]. Nerakstīt pielāgotu paroļu jaukšanu.”
  • „Glabā paroles kā jaucējvērtības, kas veidotas ar bcrypt vai Argon2.”
  • „Sesijai izmanto HttpOnly, Secure sīkdatnes.”
  • „Pievieno lomas: admin un member. Uzskaiti katru galapunktu un to, kuras lomas drīkst to izsaukt.”
  • „Serverī nodrošini, ka lietotāji var lasīt un labot tikai savus ierakstus. Pēc tam parādi, kā to pārbaudīji.”
  • „Pievieno paroles atiestatīšanu ar vienreizējām saitēm, kas beidzas pēc vienas stundas.”
  • „Ierobežo pieteikšanās mēģinājumu biežumu.”

Pēc tam pārbaudiet paši: izveidojiet divus kontus un mēģiniet piekļūt vienam konta datiem, esot pieteicies ar otru. Mūsu ceļvedis par pieteikšanās pievienošanu un drošības kontrolsaraksts iet tālāk.

Autentifikācija Mythex

Mythex nenodrošina iebūvētu autentifikācijas produktu jūsu lietotnes lietotājiem; jūs izvēlaties pieeju — e-pastu un paroli, kas glabājas jūsu projekta datubāzē, vai hostēta pakalpojumu sniedzēja SDK — un lūdzat aģentu to pievienot. Pakalpojumu sniedzēju atslēgas ieliek projekta noslēpumos, nevis čatā. Tas ir atsevišķi no tā, kā jūs pieslēdzaties pašam Mythex. Dokumentāciju receptē par pieteikšanās pievienošanu lietotnei ir sākuma uzvedne, ko varat pielāgot, un kas ir API paskaidro, kur atrodas šīs servera puses pārbaudes.

Jautājumi

Kāda ir atšķirība starp autentifikāciju un autorizāciju?

Autentifikācija pārbauda, kas jūs esat, piemēram, verificējot jūsu paroli. Autorizācija nosaka, ko jūs drīkstat darīt, kad jūs esat zināms, piemēram, vai drīkstat redzēt administratora lapu vai labot cita klienta rezervāciju. Lietotnēm vajag abus.

Kas ir OAuth?

OAuth 2.0 ir standarts, kas ļauj lietotnei saņemt ierobežotu piekļuvi jūsu kontam citā pakalpojumā, neredzot jūsu paroli. „Pieteikties ar Google” izmanto OpenID Connect — identitātes slāni, kas veidots virs OAuth 2.0, tāpēc lietotne no Google uzzina, kas jūs esat.

Vai manai lietotnei vajadzētu glabāt paroles?

Nekad lasāmā formā. Ja izmantojat pieteikšanos ar e-pastu un paroli, paroles jāglabā kā sālītas jaucējvērtības, kas veidotas ar lēnu algoritmu, kas paredzēts parolēm, piemēram, Argon2 vai bcrypt. Daudzas lietotnes šo problēmu apiet, izmantojot hostētu autentifikācijas pakalpojumu, sociālo pieteikšanos vai e-pasta saites.

Sesijas vai marķieri — ko lietot manai lietotnei?

Abi darbojas. Sesija glabā pieteikšanās stāvokli serverī un pārlūkprogrammai sīkdatnē dod nejaušu identifikatoru, ko ir viegli atsaukt. Marķieris, piemēram, JWT, pats nes parakstītu informāciju, kas piemērots API un mobilajiem klientiem, bet to ir grūtāk atcelt pirms termiņa beigām. Tipiskai tīmekļa lietotnei sīkdatnēs balstītas sesijas ir labs noklusējums.

Mythex · Pricing · Veidojiet jebko ar AI · Tīmekļa vietņu un lietotņu veidnes · Mythex salīdzinājumā · AI lietotņu veidošanas glosārijs · Bezmaksas rīki lietotņu veidošanai ar AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)