Vadovai

Kas yra autentifikacija? Prisijungimai, sesijos ir OAuth paaiškinti

Autentifikacija – tai, kaip programa patvirtina, kas yra naudotojas, paprastai patikrindama tai, ką jis žino (slaptažodį), ką turi (kodą, išsiųstą į telefoną ar el. paštą) arba tapatybę iš kitos patikimos paslaugos (pavyzdžiui, „Prisijungti su Google“). Kai naudotojas autentifikuotas, programa jį prisimena naudodama sesiją arba prieigos raktą, kad jam nereikėtų prisijungti kiekviename puslapyje. Nustatyti, ką žinomas naudotojas gali daryti, yra atskiras žingsnis, vadinamas autorizacija.

Kodėl tai svarbu kuriant su DI

Prisijungimo pridėjimas – viena dažniausių užklausų DI kūrėjui ir viena lengviausiai subtiliai suklysti. Prisijungimo puslapį sugeneruoti paprasta. Sunkiausia yra viskas aplink jį:

  • Ar slaptažodžiai saugomi saugiai?
  • Ar kiekvienas privatus puslapis ir kiekvienas API galinis taškas tikrai patikrina, kas prašo?
  • Ar prisijungęs klientas gali pamatyti kito kliento duomenis pakeitęs skaičių URL adrese?
  • Kas nutinka, kai kas nors pamiršta slaptažodį?

Programa gali atrodyti visiškai saugi, nors neatitinka nė vieno iš šių punktų. Supratimas, kaip veikia jos dalys, padeda užduoti teisingus klausimus ir patikrinti tinkamus dalykus.

Kasdienis palyginimas

Pagalvokite apie registraciją viešbutyje.

Priimamajame parodai asmens dokumentą. Tai yra autentifikacija: įrodai, kas esi. Recepcijos darbuotojas tau įduoda kortelę su raktu. Ši kortelė yra tavo sesija: visą viešnagės laiką nebereikia rodyti dokumento, tiesiog prisilieti kortele.

Kortele atrakinamas tavo kambarys, sporto salė ir liftas į tavo aukštą – bet ne kitų svečių kambariai ar darbuotojų patalpos. Tai yra autorizacija: prieiga, kurią tavo tapatybė leidžia naudoti. Jei kortelę pametei, viešbutis ją gali deaktyvuoti prie recepcijos (sesijos panaikinimas). Išsiregistravus ji nustoja veikti (atsijungimas arba galiojimo pabaiga).

„Prisijungti su Google“ yra panašu į tai, kai viešbutis priima patikimo partnerio raštą, kuriame sakoma „šis asmuo yra toks“, vietoj to, kad patikrintų tavo dokumentą pats.

Pagrindiniai prisijungimo būdai

BūdasKaip veikiaPrivalumaiTrūkumai
El. paštas ir slaptažodisNaudotojas pasirenka slaptažodį; programa saugo jo maišos kodąPažįstama, nėra išorinės priklausomybėsReikia saugiai saugoti maišos kodus ir tvarkyti slaptažodžio atstatymą
Magiška nuoroda / vienkartinis kodasPrograma el. paštu išsiunčia nuorodą ar kodą, kuris prisijungia naudotojąNėra slaptažodžių, kuriuos būtų galima nutekinti ar pamirštiPriklauso nuo el. laiškų pristatymo; prisijungimas lėtesnis
Socialinis prisijungimas (OAuth / OpenID Connect)Naudotojas prisijungia su Google, Apple, GitHub ir pan.Greita naudotojams; slaptažodžio nesaugote jūsSąranka su kiekvienu teikėju; naudotojai be tokių paskyrų
Patalpinta autentifikavimo paslaugaPaslauga, pavyzdžiui, Clerk, Auth0 ar Supabase Auth, tvarko registraciją, prisijungimą ir atstatymąMažiau saugumo darbo jumsMėnesio mokestis augant; dar viena priklausomybė
Daugiafaktorė autentifikacija (MFA / 2FA)Antras patikrinimas po pirmojo, pavyzdžiui, kodas iš autentifikatoriaus programosGerokai sunkiau įsilaužtiŠiek tiek daugiau trinties

Kaip turėtų būti saugomi slaptažodžiai

Saugi programa niekada nesaugo tikro tavo slaptažodžio. Vietoj to ji saugo maišos kodą: vienakryptės funkcijos rezultatą, kuris slaptažodį paverčia fiksuota eilute. Kai prisijungi, programa sumaišo tai, ką įvedei, ir palygina rezultatą su saugomu maišos kodu.

Du dalykai daro tai saugų:

  • Druska – atsitiktinė reikšmė, pridedama prie kiekvieno slaptažodžio prieš maišant, todėl du žmonės su tuo pačiu slaptažodžiu gauna skirtingus maišos kodus, o iš anksto apskaičiuotos paieškos lentelės tampa nenaudingos.
  • Lėtas algoritmas, skirtas slaptažodžiams – pavyzdžiui, Argon2, bcrypt ar scrypt. Bendros paskirties maišos, tokios kaip MD5 ar SHA-256, pačios savaime yra per greitos; užpuolikai gali išbandyti milijardus spėjimų.

Maišymas nėra tas pats kas šifravimas. Užšifruotus duomenis galima iššifruoti raktu; slaptažodžio maišos kodas sukurtas taip, kad jo neįmanoma atvirkščiai atkurti.

Sesijos ir prieigos raktai

Prisijungus programai reikia atpažinti tave kiekvienoje užklausoje. Yra du įprasti būdai.

Sesija (slapukas)Prieigos raktas (pvz., JWT)
Ką laiko naršyklėAtsitiktinį sesijos ID slapukePasirašytą raktą su naudotojo informacija ir galiojimo pabaiga
Kur laikoma prisijungimo būsenaServeryje, duomenų bazėje ar saugyklojePačiame rakte
Atjungti žmogų visurLengva: serveryje ištrinti sesijąSunkiau: raktas galioja iki pabaigos, nebent palaikote juodąjį sąrašą
Tipinis naudojimasTradicinės žiniatinklio programosAPI, mobiliosios programos, paslaugos, kurios bendrauja tarpusavyje

Slapukams svarbūs trys nustatymai: HttpOnly (puslapio JavaScript negali nuskaityti slapuko), Secure (siunčiamas tik per HTTPS) ir SameSite (apriboja jo siuntimą užklausoms iš kitų svetainių). Prieigos raktų saugojimas naršyklės localStorage yra įprastas, bet juos atskleidžia bet kuris puslapyje veikiantis scenarijus.

OAuth ir „Prisijungti su Google“

OAuth 2.0 – tai deleguotos autorizacijos standartas: jis leidžia programai gauti ribotą prieigą prie tavo paskyros kitoje paslaugoje, pavyzdžiui, skaityti tavo Google kalendorių, niekada nematant tavo Google slaptažodžio. Tave nukreipia į Google, patvirtini konkrečius leidimus (vadinamus sritimis), o Google programai išduoda raktą tik tiems leidimams.

Pats OAuth buvo sukurtas suteikti prieigą, o ne nurodyti, kas esi. OpenID Connect (OIDC) – tai sluoksnis ant OAuth 2.0, pridedantis tapatybę; būtent jį naudoja „Prisijungti su Google“ ar „Prisijungti su Apple“. Norint jį nustatyti, programą užregistruojate pas teikėją ir gaunate kliento ID bei kliento paslaptį; paslaptis lieka jūsų serveryje.

Darbo pavyzdys: prisijungimas prie klientų portalo

Tarkime, kuriate portalą, kuriame dizaino agentūros klientai mato savo projektus ir sąskaitas.

  • Autentifikacija: klientai prisijungia su el. paštu ir magine nuoroda, todėl nereikia tvarkyti slaptažodžių. Agentūros darbuotojai prisijungia su Google Workspace paskyromis.
  • Vaidmenys: kiekvienas naudotojas turi vaidmenį – client arba staff.
  • Autorizacijos taisyklės:
VeiksmasKlientasDarbuotojas
Matyti savo įmonės projektusTaipTaip
Matyti kitų įmonių projektusNeTaip
Įkelti failą į projektąTik savo projektusTaip
Pažymėti sąskaitą apmokėtaNeTaip
  • Kur tai taikoma: serveryje, kiekvienai užklausai. Serveris suranda prisijungusį naudotoją ir grąžina tik tuos projektus, kurių project.company_id sutampa su naudotojo įmone. Vien paslėpti mygtuką „Pažymėti apmokėta“ nepakanka – galinis taškas pats turi atmesti užklausą.

Dažniausių terminų paaiškinimai

TerminasReikšmė
Autentifikacija (AuthN)Patvirtinti, kas yra asmuo.
Autorizacija (AuthZ)Nustatyti, ką jis gali daryti.
SesijaPrograma prisimena, kad esi prisijungęs, tarp užklausų.
SlapukasNedidelis duomenų fragmentas, kurį naršyklė kiekvienos užklausos metu siunčia atgal svetainei.
JWTJSON Web Token: pasirašytas, kompaktiškas raktas, kuriame yra tokia informacija kaip naudotojo ID ir galiojimo pabaiga.
Vaidmuo / leidimasEtiketės, pavyzdžiui, admin ar member, kurios nusprendžia prieigą.
MFA / 2FAReikalavimas antro įrodymo, pavyzdžiui, kodo iš autentifikatoriaus programos.
SSOVienkartinis prisijungimas: vienas prisijungimas (dažnai įmonės paskyra) daugeliui programų.
401 ir 403„Kas tu?“ (neautentifikuotas) ir „Tu to negali daryti“ (neautorizuotas).

Dažnos klaidos ir klaidingi įsitikinimai

  • Leidimų tikrinimas tik puslapyje. Jei naršyklė paslepia mygtuką, bet API netikrina, bet kas gali kviesti API tiesiogiai.
  • Pasitikėjimas ID iš URL. /invoices/1042 turi patikrinti, ar sąskaita 1042 priklauso prisijungusiam naudotojui.
  • Savo kriptografijos kūrimas. Naudokite žinomas bibliotekas ar teikėjus; neleiskite DI išrasti maišymo schemos.
  • Silpnas slaptažodžio atstatymas. Atstatymo nuorodos turi būti vienkartinės, greitai pasibaigiančios ir neatskleisti, ar el. paštas turi paskyrą.
  • Prisijungimo ir kūrimo įrankio paskyros painiojimas. Tavo programos naudotojai yra atskiri nuo tavo paskyros įrankyje, kuriuo kuri programą.
  • Prisijungimo bandymų neriboti. Be ribojimo užpuolikai gali be galo bandyti slaptažodžius.

Ko paprašyti iš DI kūrėjo

  • „Pridėk registraciją ir prisijungimą naudodamas [žinomą biblioteką ar teikėją]. Nerašyk pasirinktinio slaptažodžių maišymo.“
  • „Saugok slaptažodžius, užmaišytus bcrypt ar Argon2.“
  • „Sesijai naudok HttpOnly ir Secure slapukus.“
  • „Pridėk vaidmenis: admin ir member. Išvardyk kiekvieną galinį tašką ir kurie vaidmenys gali jį kviesti.“
  • „Serveryje užtikrink, kad naudotojai gali skaityti ir redaguoti tik savo įrašus. Tada parodyk, kaip tai patikrinai.“
  • „Pridėk slaptažodžio atstatymą su vienkartinėmis nuorodomis, kurios pasibaigia per valandą.“
  • „Riboti prisijungimo bandymų dažnį.“

Tada patikrink pats: sukurk dvi paskyras ir pabandyk pasiekti vienos naudotojo duomenis būdamas prisijungęs kaip kitas. Vadovas, kaip pridėti prisijungimą ir saugumo kontrolinis sąrašas padeda eiti toliau.

Autentifikacija Mythex

Mythex neteikia įmontuoto autentifikavimo produkto tavo programos naudotojams; pats pasirenki būdą – el. paštą ir slaptažodį, saugomus projekto duomenų bazėje, arba patalpintos paslaugos SDK – ir paprašai agento jį pridėti. Teikėjų raktai dedami į projekto paslaptis, o ne į pokalbį. Tai atskiras dalykas nuo to, kaip prisijungi prie pačio Mythex. Dokumentacijos receptas prisijungimo pridėjimas prie tavo programos turi pradinę užklausą, kurią gali pritaikyti, o kas yra API paaiškina, kur gyvena tie serverio pusės patikrinimai.

Klausimai

Koks skirtumas tarp autentifikacijos ir autorizacijos?

Autentifikacija patikrina, kas esi, pavyzdžiui, patikrindama slaptažodį. Autorizacija nusprendžia, ką tau leidžiama daryti, kai tavo tapatybė žinoma, pavyzdžiui, ar gali matyti administratoriaus puslapį ar redaguoti kito žmogaus rezervaciją. Programoms reikia abiejų.

Kas yra OAuth?

OAuth 2.0 – tai standartas, leidžiantis programai gauti ribotą prieigą prie tavo paskyros kitoje paslaugoje, nematant tavo slaptažodžio. Funkcija „Prisijungti su Google“ naudoja OpenID Connect – tapatybės sluoksnį, sukurtą ant OAuth 2.0, todėl programa iš Google sužino, kas tu esi.

Ar mano programa turėtų saugoti slaptažodžius?

Niekada įskaitoma forma. Jei naudojate prisijungimą su el. pašto adresu ir slaptažodžiu, slaptažodžiai turi būti saugomi kaip užsūdyti maišos kodai, sukurti lėtu algoritmu, skirtu slaptažodžiams, pavyzdžiui, Argon2 arba bcrypt. Daugelis programų šios problemos išvengia naudodamos patalpintą autentifikavimo paslaugą, socialinį prisijungimą ar el. pašto magines nuorodas.

Sesijos ar prieigos raktai – ką turėtų naudoti mano programa?

Tinka abu. Sesija saugo prisijungimo būseną serveryje ir naršyklei slapukuose pateikia atsitiktinį ID, kurį lengva panaikinti. Prieigos raktas, pavyzdžiui, JWT, pats talpina pasirašytą informaciją, todėl tinka API ir mobiliesiems klientams, bet jį sunkiau atšaukti prieš pasibaigiant galiojimui. Tipinei žiniatinklio programai slapukais grindžiamos sesijos yra patikimas numatytasis pasirinkimas.

Mythex · Pricing · Kurkite bet ką su dirbtiniu intelektu · Svetainių ir programėlių šablonai · Mythex palyginimas · Programėlių kūrimo su dirbtiniu intelektu žodynėlis · Nemokami programėlių kūrimo su dirbtiniu intelektu įrankiai · 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 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Latviešu Македонски മലയാളം Монгол मराठी 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 简体中文 繁體中文(香港) 繁體中文(台灣)