Vodniki

Kaj je avtentikacija? Prijave, seje in OAuth pojasnjeni

Avtentikacija je način, kako aplikacija potrdi, kdo je uporabnik – običajno s preverjanjem nečesa, kar uporabnik ve (geslo), nečesa, kar ima (kodo, poslano na telefon ali e-pošto), ali identitete pri drugi zaupanja vredni storitvi (na primer »Prijava z Googlom«). Ko je uporabnik avtenticiran, ga aplikacija zapomni prek seje ali žetona, da se ne bi moral prijaviti na vsaki strani. Odločitev, kaj ta znani uporabnik sme početi, je ločen korak, imenovan avtorizacija.

Zakaj je to pomembno, ko gradite z AI

Dodajanje prijave je ena najpogostejših prošenj graditeljem z AI in ena, pri kateri je zlahka nekaj subtilno narobe. Stran za prijavo je preprosta za generiranje. Težko je vse okoli nje:

  • Ali so gesla shranjena varno?
  • Ali vsaka zasebna stran in vsaka točka API-ja res preveri, kdo sprašuje?
  • Ali lahko prijavljena stranka vidi podatke druge stranke, če spremeni številko v URL-ju?
  • Kaj se zgodi, ko nekdo pozabi geslo?

Aplikacija je lahko videti popolnoma varna, pa ob tem pade na vseh teh vprašanjih. Če razumete gibljive dele, lahko postavite prava vprašanja in preverite prave stvari.

Vsakdanja primerjava

Pomislite na prijavo v hotel.

Na recepciji pokažete osebni dokument. To je avtentikacija: dokazovanje, kdo ste. Recepcionist vam nato da kartico za sobo. Ta kartica je vaša seja: za preostanek bivanja ne pokazujete več dokumenta, samo kartico.

Kartica odpre vašo sobo, fitnes in dvigalo do vašega nadstropja – ne pa sob drugih gostov ali pisarne osebja. To je avtorizacija: do česa vaša identiteta sme dostopati. Če kartico izgubite, jo lahko recepcija deaktivira (preklic seje). Ob odjavi preneha delovati (odjava ali potek).

»Prijava z Googlom« je kot da hotel sprejme pismo zaupanja vredne partnerske ustanove, ki pravi »to je ta oseba«, namesto da bi sam preveril vaš osebni dokument.

Glavne metode prijave

MetodaKako delujePrednostiSlabosti
E-pošta + gesloUporabnik izbere geslo; aplikacija shrani njegovo zgoščeno vrednostZnano, brez zunanje odvisnostiMorate varno shranjevati zgoščene vrednosti in obravnavati ponastavitve
Povezava za prijavo / enkratna kodaAplikacija pošlje e-pošto s povezavo ali kodo, ki uporabnika prijaviNi gesel, ki bi jih lahko uhajala ali pozabiliOdvisno od dostave e-pošte; prijava je počasnejša
Družbena prijava (OAuth / OpenID Connect)Uporabnik se prijavi z Googlom, Applom, GitHubom ipd.Hitro za uporabnike; vi ne shranjujete geslaNastavitev pri vsakem ponudniku; uporabniki brez teh računov
Gostovani ponudnik avtentikacijeStoritev, kot so Clerk, Auth0 ali Supabase Auth, obravnava registracijo, prijavo in ponastavitveManj varnostnega dela za vasMesečni strošek pri obsegu; dodatna odvisnost
Večfaktorska prijava (MFA / 2FA)Drugo preverjanje po prvem, na primer koda iz aplikacije za overjanjeVeliko težje vdretiMalo več trenja

Kako je treba shranjevati gesla

Varna aplikacija nikoli ne shrani vašega dejanskega gesla. Namesto tega shrani zgoščeno vrednost (hash): rezultat enosmerne funkcije, ki geslo spremeni v fiksen niz. Ko se prijavite, aplikacija zgosti, kar ste vtipkali, in primerja rezultat s shranjeno zgoščeno vrednostjo.

Dve podrobnosti naredita to varno:

  • Sol – naključna vrednost, dodana vsakemu geslu pred zgoščevanjem, tako da imata dva človeka z enakim geslom različni zgoščeni vrednosti, predizračunane tabele iskanja pa so neuporabne.
  • Počasen algoritem, narejen za gesla – na primer Argon2, bcrypt ali scrypt. Splošne zgoščevalne funkcije, kot sta MD5 ali SHA-256, so same po sebi preveč hitre; napadalci lahko preizkusijo milijarde ugibanj.

Zgoščevanje ni isto kot šifriranje. Šifrirane podatke lahko z ključem dešifriramo; zgoščena vrednost gesla je zasnovana tako, da je sploh ne moremo obrniti.

Seje proti žetonom

Po prijavi mora aplikacija pri vsaki zahtevi prepoznati, kdo ste. Obstajata dva pogosta pristopa.

Seja (piškotek)Žeton (npr. JWT)
Kaj hrani brskalnikNaključni ID seje v piškotkuPodpisan žeton z uporabniškimi podatki in potekom
Kje živi stanje prijaveNa strežniku, v bazi ali shrambiZnotraj samega žetona
Odjava uporabnika povsodEnostavno: izbrišete sejo na strežnikuTežje: žeton ostane veljaven do poteka, razen če vzdržujete seznam preklicanih
Tipična uporabaTradicionalne spletne aplikacijeAPI-ji, mobilne aplikacije, storitve, ki komunicirajo med seboj

Za piškotke so pomembne tri nastavitve: HttpOnly (JavaScript na strani ne more brati piškotka), Secure (pošlje se samo prek HTTPS) in SameSite (omeji pošiljanje zahtevkov z drugih spletnih mest). Shranjevanje žetonov v localStorage brskalnika je pogosto, vendar jih izpostavi vsaki skripti, ki teče na strani.

OAuth in »Prijava z Googlom«

OAuth 2.0 je standard za delegirano avtorizacijo: aplikaciji omogoča omejen dostop do vašega računa pri drugi storitvi – recimo branje vašega Google koledarja – brez da bi kdaj videla vaše Google geslo. Preusmerjeni ste k Googlu, odobrite določena dovoljenja (imenovana obsegi ali scopes), Google pa aplikaciji da žeton samo za ta dovoljenja.

OAuth sam po sebi je bil zasnovan za dodeljevanje dostopa, ne za to, da bi povedal, kdo ste. OpenID Connect (OIDC) je plast na vrhu OAuth 2.0, ki dodaja identiteto – to uporablja »Prijava z Googlom« ali »Prijava z Applom«. Za nastavitev aplikacijo registrirate pri ponudniku in dobite ID odjemalca ter skrivnost odjemalca; skrivnost ostane na vašem strežniku.

Praktičen primer: prijava za portal strank

Recimo, da gradite portal, kjer stranke oblikovalske agencije vidijo svoje projekte in račune.

  • Avtentikacija: stranke se prijavijo z e-pošto in povezavo za prijavo, tako da ni gesel za upravljanje. Zaposleni v agenciji se prijavijo z računi Google Workspace.
  • Vloge: vsak uporabnik ima vlogo – client ali staff.
  • Pravila avtorizacije:
DejanjeStrankaZaposleni
Ogled projektov njihovega podjetjaDaDa
Ogled projektov drugih podjetijNeDa
Nalaganje datoteke v projektSamo v lastnih projektihDa
Označitev računa kot plačanegaNeDa
  • Kje se uveljavlja: na strežniku, za vsako zahtevo. Strežnik poišče prijavljenega uporabnika in vrne samo projekte, kjer se project.company_id ujema s podjetjem uporabnika. Skrivanje gumba »Označi plačano« ni dovolj – končna točka sama mora zavrniti zahtevo.

Pogosti pojmi

IzrazPomen
Avtentikacija (AuthN)Potrjevanje, kdo nekdo je.
Avtorizacija (AuthZ)Odločanje, kaj sme početi.
SejaAplikacija si zapomni, da ste prijavljeni, med zahtevki.
PiškotekMajhen podatkovni kos, ki ga brskalnik s vsako zahtevo pošlje nazaj na spletno mesto.
JWTJSON Web Token: podpisan, kompakten žeton, ki nosi trditve, kot sta ID uporabnika in potek.
Vloga / dovoljenjeOznake, kot sta admin ali member, ki določajo dostop.
MFA / 2FAZahteva za drugi dokaz, na primer kodo iz aplikacije za overjanje.
SSOEnotna prijava: ena prijava (pogosto s podjetniškim računom) za mnoge aplikacije.
401 proti 403»Kdo ste?« (ni avtenticiran) proti »tega ne smete« (ni avtoriziran).

Pogoste napake in zmote

  • Preverjanje dovoljenj samo v vmesniku. Če brskalnik skrije gumb, API pa ne preveri, lahko vsak pokliče API neposredno.
  • Zaupanje ID-jem iz URL-ja. /invoices/1042 mora preveriti, da račun 1042 pripada prijavljenemu uporabniku.
  • Izumljanje lastne kriptografije. Uporabite dobro znane knjižnice ali ponudnike; AI naj ne izmišlja sheme zgoščevanja.
  • Šibka ponastavitev gesla. Povezave za ponastavitev morajo veljati samo enkrat, hitro poteči in ne smejo razkriti, ali ima e-poštni naslov račun.
  • Mešanje vaše prijave s prijavo graditelja. Uporabniki vaše aplikacije so ločeni od vašega računa pri orodju, s katerim gradite.
  • Brez omejitve poskusov prijave. Brez nje lahko napadalci neskončno preizkušajo gesla.

Kaj zahtevati od svojega graditelja z AI

  • »Dodaj registracijo in prijavo z [dobro znano knjižnico ali ponudnikom]. Ne piši lastnega zgoščevanja gesel.«
  • »Shrani gesla zgoščena z bcrypt ali Argon2.«
  • »Za sejo uporabi piškotke HttpOnly in Secure.«
  • »Dodaj vloge: admin in member. Naštej vsako končno točko in katere vloge jo smejo klicati.«
  • »Na strežniku uveljavi, da lahko uporabniki berejo in urejajo samo svoje zapise. Nato mi pokaži, kako si to preveril.«
  • »Dodaj ponastavitev gesla z enkratnimi povezavami, ki potečejo v eni uri.«
  • »Omeji število poskusov prijave.«

Nato preizkusite sami: ustvarite dva računa in poskusite dostopati do podatkov enega, medtem ko ste prijavljeni kot drugi. Naš vodnik za dodajanje prijave in kontrolni seznam varnosti gresta dlje.

Avtentikacija v Mythex

Mythex ne ponuja vgrajenega izdelka za avtentikacijo uporabnikov vaše aplikacije; izberete pristop – e-pošto in geslo, shranjena v bazi podatkov vašega projekta, ali SDK gostovanega ponudnika – in agenta prosite, naj ga doda. Ključi ponudnika gredo v tajnosti projekta, ne v klepet. To je ločeno od tega, kako se prijavljate v sam Mythex. Recept v dokumentaciji o dodajanju prijave v aplikacijo vsebuje začetni poziv, ki ga lahko prilagodite, kaj je API pa pojasni, kje živijo ta preverjanja na strežniku.

Vprašanja

Kakšna je razlika med avtentikacijo in avtorizacijo?

Avtentikacija preveri, kdo ste, na primer s preverjanjem gesla. Avtorizacija odloči, kaj smete narediti, ko ste znani – na primer ali lahko vidite skrbniško stran ali urejate rezervacijo nekoga drugega. Aplikacije potrebujejo obe.

Kaj je OAuth?

OAuth 2.0 je standard, ki aplikaciji omogoča omejen dostop do vašega računa pri drugi storitvi, ne da bi videla vaše geslo. »Prijava z Googlom« uporablja OpenID Connect, identitetno plast na vrhu OAuth 2.0, zato aplikacija od Googla izve, kdo ste.

Ali naj aplikacija shranjuje gesla?

Nikoli v berljivi obliki. Če uporabljate prijavo z e-pošto in geslom, morajo biti gesla shranjena kot zgoščene vrednosti s soljo, narejene s počasnim algoritmom, zasnovanim za gesla, na primer Argon2 ali bcrypt. Mnoge aplikacije se temu izognejo z gostovanim ponudnikom avtentikacije, družbeno prijavo ali povezavami za prijavo po e-pošti.

Seje ali žetoni – kaj naj uporabi moja aplikacija?

Oboje deluje. Seja hrani stanje prijave na strežniku, brskalnik pa dobi naključni ID v piškotku, kar je enostavno preklicati. Žeton, kot je JWT, nosi podpisane podatke sam s seboj, kar ustreza API-jem in mobilnim odjemalcem, vendar ga je pred potekom težje preklicati. Za tipično spletno aplikacijo so seje na piškotkih zanesljiva privzeta izbira.

Mythex · Pricing · Zgradite karkoli z AI · Predloge za spletna mesta in aplikacije · Mythex v primerjavi · Slovar pojmov gradnje aplikacij z AI · Brezplačna orodja za gradnjo aplikacij z 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ų Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)