Mis on autentimine? Sisselogimine, sessioonid ja OAuth
Autentimine on see, kuidas rakendus kinnitab, kes kasutaja on – tavaliselt kontrollides midagi, mida kasutaja teab (parooli), midagi, mis tal on (koodi, mis saadeti telefonile või e-posti aadressile), või identiteeti teisest usaldusväärsest teenusest (näiteks „Logi sisse Google'iga”). Kui kasutaja on autentitud, mäletab rakendus teda sessiooni või žetooni abil, nii et ta ei peaks igal lehel uuesti sisse logima. Otsus, mida see tuntud kasutaja tohib teha, on eraldi samm, mida nimetatakse volituste kontrolliks (authorization).
Miks see AI-ga ehitamisel oluline on
Sisselogimise lisamine on üks levinumaid päringuid, mida inimesed AI ehitajale esitavad, ja üks lihtsamaid asju valesti teha. Sisselogimisvormi on lihtne genereerida. Raske osa on kõik selle ümber:
- Kas paroole hoitakse turvaliselt?
- Kas iga privaatne leht ja iga API lõpp-punkt tegelikult kontrollib, kes päringu teeb?
- Kas sisselogitud klient näeb teise kliendi andmeid, muutes URL-is numbrit?
- Mis juhtub, kui keegi unustab parooli?
Rakendus võib välja näha täiesti turvaline ja ebaõnnestuda kõigis neis punktides. Kui mõistad, mis osad on liikuvad, oskad esitada õigeid küsimusi ja õigeid asju testida.
Igapäevane võrdlus
Mõtle hotelli sisseregistreerimisele.
Vastuvõtulauas näitad isikut tõendavat dokumenti. See on autentimine: tõestad, kes oled. Retseptsionist annab sulle kaardi. See kaart on sinu sessioon: kogu viibimise ajal ei pea sa dokumenti uuesti näitama, vaid puudutad kaarti.
Kaart avab su toa, spordisaali ja su korruse lifti – aga mitte teiste külaliste tube ega personaliruumi. See on volituste kontroll: mida sinu isik tohib kasutada. Kui kaotad kaardi, saab hotell selle vastuvõtus deaktiveerida (sessiooni tühistamine). Väljaregistreerimisel see lakkab töötamast (väljalogimine või aegumine).
„Logi sisse Google'iga” on nagu hotell, mis aktsepteerib usaldusväärse partneri kirja, mis ütleb „see on see isik”, selle asemel et kontrollida su dokumenti ise.
Peamised sisselogimismeetodid
| Meetod | Kuidas töötab | Plussid | Miinused |
|---|---|---|---|
| E-post + parool | Kasutaja valib parooli; rakendus salvestab selle räsi | Tuttav, välist sõltuvust pole | Pead räsisid turvaliselt hoidma ja lähtestamist käsitlema |
| Ühekordne link / kood | Rakendus saadab e-kirjaga lingi või koodi, mis logib kasutaja sisse | Pole paroole, mida lekitada ega unustada | Sõltub e-kirja kohaletoimetamisest; sisselogimine on aeglasem |
| Sotsiaalne sisselogimine (OAuth / OpenID Connect) | Kasutaja logib sisse Google'i, Apple'i, GitHubi vms kontoga | Kasutajatele kiire; sina ei salvesta parooli | Seadistus igas pakkujas; kasutajad ilma nende kontodeta |
| Hostitud autentimisteenus | Teenus nagu Clerk, Auth0 või Supabase Auth käsitleb registreerimist, sisselogimist ja lähtestamist | Vähem turvatööd sinu poolel | Igakuine kulu suuremas mahus; veel üks sõltuvus |
| Mitmefaktoriline autentimine (MFA / 2FA) | Teise kontrolli esimese järel, näiteks autentimisrakenduse kood | Palju raskem sisse murda | Natuke rohkem takistusi |
Kuidas paroole tuleks salvestada
Turvaline rakendus ei salvesta kunagi sinu tegelikku parooli. Selle asemel salvestab ta räsi: ühesuunalise funktsiooni väljundi, mis muudab parooli kindlapikkuseks stringiks. Sisselogimisel räsib rakendus sisestatud väärtuse ja võrdleb tulemust salvestatud räsiga.
Kaks detaili teevad selle turvaliseks:
- Sool – juhuslik väärtus, mis lisatakse igale paroolile enne räsimist, nii et kaks inimest sama parooliga saavad erinevad räsid ning eelarvutatud otsingutabelid on kasutud.
- Paroolidele mõeldud aeglane algoritm – näiteks Argon2, bcrypt või scrypt. Üldotstarbelised räsid nagu MD5 või SHA-256 on üksi liiga kiired; ründajad saaksid miljardeid arvamisi proovida.
Räsimine ei ole sama mis krüpteerimine. Krüpteeritud andmeid saab võtmega dekrüpteerida; paroolirääsi on mõeldud üldse mitte tagasi pööratavaks.
Sessioonid vs žetoonid
Pärast sisselogimist peab rakendus sind iga päringu puhul ära tundma. On kaks levinud lähenemist.
| Sessioon (küpsis) | Žeton (nt JWT) | |
|---|---|---|
| Mida brauser hoiab | Juhuslik sessiooni ID küpsises | Allkirjastatud žeton, mis sisaldab kasutajainfot ja aegumist |
| Kus sisselogimise olek elab | Serveris, andmebaasis või hoidlas | Žetoonis endas |
| Kasutaja väljalogimine kõikjalt | Lihtne: kustuta sessioon serveris | Raskem: žeton kehtib kuni aegumiseni, välja arvatud juhul, kui hoiad musta nimekirja |
| Tüüpiline kasutus | Traditsioonilised veebirakendused | API-d, mobiilirakendused, teenused, mis omavahel suhtlevad |
Küpsiste puhul on kolm seadet olulised: HttpOnly (lehel olev JavaScript ei saa küpsist lugeda), Secure (saadetakse ainult HTTPS-i kaudu) ja SameSite (piirab saatmist päringutele teistelt saitidelt). Žetoonide hoidmine brauseri localStorage'is on tavaline, kuid see avab need igale lehel töötavale skriptile.
OAuth ja „Logi sisse Google'iga”
OAuth 2.0 on standard delegeeritud volituste jaoks: see laseb rakendusel saada piiratud juurdepääsu sinu kontole teises teenuses – näiteks lugeda sinu Google'i kalendrit – ilma et ta kunagi näeks sinu Google'i parooli. Sind suunatakse Google'isse, kinnitad konkreetsed õigused (mida nimetatakse scope'ideks) ning Google annab rakendusele žetooni ainult nende õiguste jaoks.
OAuth ise oli loodud juurdepääsu andmiseks, mitte selleks, et öelda, kes sa oled. OpenID Connect (OIDC) on OAuth 2.0 peale ehitatud kiht, mis lisab identiteedi – seda kasutab „Logi sisse Google'iga” või „Logi sisse Apple'iga”. Seadistamiseks registreerid oma rakenduse pakkujas ja saad kliendi ID ning kliendi saladuse; saladus jääb sinu serverisse.
Näide: sisselogimine kliendiportaali
Oletame, et ehitad portaali, kus disainiagentuuri kliendid näevad oma projekte ja arveid.
- Autentimine: kliendid logivad sisse e-posti ja ühekordse lingiga, nii et paroole pole vaja hallata. Agentuuri töötajad logivad sisse Google Workspace'i kontodega.
- Rollid: igal kasutajal on roll –
clientvõistaff. - Volituste reeglid:
| Toiming | Klient | Töötaja |
|---|---|---|
| Näha oma ettevõtte projekte | Jah | Jah |
| Näha teiste ettevõtete projekte | Ei | Jah |
| Laadida projekti fail üles | Ainult oma projektid | Jah |
| Märkida arve tasutuks | Ei | Jah |
- Kus seda jõustatakse: serveris, iga päringu puhul. Server leiab sisselogitud kasutaja ja tagastab ainult need projektid, kus
project.company_idvastab kasutaja ettevõttele. Nupu „Märgi tasutuks” peitmine ei piisa – lõpp-punkt peab ise keelduma.
Levinud mõisted selgitatult
| Mõiste | Tähendus |
|---|---|
| Autentimine (AuthN) | Kellegi isiku kinnitamine. |
| Volituste kontroll (AuthZ) | Otsustamine, mida tal on lubatud teha. |
| Sessioon | Rakenduse mäletamine, et oled sisse logitud, päringute vahel. |
| Küpsis | Väike andmetükk, mille brauser saadab saidile tagasi igal päringul. |
| JWT | JSON Web Token: allkirjastatud kompaktne žeton, mis kannab väiteid, näiteks kasutaja ID ja aegumist. |
| Roll / õigus | Sildid nagu admin või member, mis otsustavad juurdepääsu. |
| MFA / 2FA | Teise tõendi nõudmine, näiteks kood autentimisrakendusest. |
| SSO | Ühekordne sisselogimine: üks sisselogimine (sageli ettevõtte konto) paljudesse rakendustesse. |
| 401 vs 403 | „Kes sa oled?” (pole autentitud) vs „Seda sa ei tohi teha” (pole volitatud). |
Levinud vead ja väärarusaamad
- Õiguste kontrollimine ainult lehel. Kui brauser peidab nupu, aga API ei kontrolli, saab keegi API-t otse kutsuda.
- URL-ist tulevate ID-de usaldamine.
/invoices/1042peab kontrollima, et arve 1042 kuulub sisselogitud kasutajale. - Oma krüptograafia kirjutamine. Kasuta tuntud teeke või pakkujaid; ära lase AI-l välja mõelda räsimisskeemi.
- Nõrk parooli lähtestamine. Lähtestuslingid peaksid olema ühekordsed, kiiresti aeguvad ega tohi paljastada, kas e-posti aadressiga on konto.
- Oma sisselogimise segamine ehitaja omaga. Su rakenduse kasutajad on eraldi sinu kontost tööriistas, millega ehitad.
- Sisselogimise piiramata katsed. Ilma määrata kiirusepiiranguta võivad ründajad parooli lõputult proovida.
Mida küsida oma AI ehitajalt
- „Lisa registreerimine ja sisselogimine, kasutades [tuntud teeki või pakkujat]. Ära kirjuta oma paroolide räsimist.”
- „Salvesta paroolid räsitult, kasutades bcrypt'i või Argon2.”
- „Kasuta sessiooniküpsiste jaoks HttpOnly ja Secure küpsiseid.”
- „Lisa rollid: admin ja member. Loetle iga lõpp-punkt ja see, milliseid rolle see lubab kutsuda.”
- „Jõusta serveris, et kasutajad saavad lugeda ja muuta ainult oma kirjeid. Seejärel näita, kuidas kontrollisid.”
- „Lisa parooli lähtestamine ühekordsete linkidega, mis aeguvad tunni pärast.”
- „Piira sisselogimiskatseid kiiruspiiranguga.”
Seejärel testi ise: loo kaks kontot ja proovi ühe kasutaja andmetele ligi pääseda, olles sisse logitud teisena. Juhend sisselogimise lisamiseks ja turvakontrollnimekiri lähevad kaugemale.
Autentimine Mythexis
Mythex ei paku sinu rakenduse kasutajatele sisseehitatud autentimistoodet; valid lähenemise – e-posti ja parooli projekti andmebaasis või hostitud pakkuja SDK – ning palud agendil selle lisada. Pakkuja võtmed lähevad projekti saladustesse, mitte vestlusse. See on eraldi sellest, kuidas ise Mythexisse sisse logid. Dokumentatsiooni retsept rakenduse sisselogimise lisamine sisaldab algusprompti, mida saad kohandada, ja mis on API selgitab, kus need serveripoolsed kontrollid elavad.
Küsimused
Mis vahe on autentimisel ja volituste kontrollil?
Autentimine kontrollib, kes sa oled, näiteks kinnitades sinu parooli. Volituste kontroll otsustab, mida sul on lubatud teha, kui sind on tuntud – näiteks kas sa võid näha administraatori lehte või muuta kellegi teist broneeringut. Rakendused vajavad mõlemat.
Mis on OAuth?
OAuth 2.0 on standard, mis laseb rakendusel saada piiratud juurdepääsu sinu kontole teises teenuses ilma sinu parooli nägemata. „Logi sisse Google'iga” kasutab OpenID Connecti, identiteedikihti OAuth 2.0 peal, nii et rakendus saab Google'ilt teada, kes sa oled.
Kas minu rakendus peaks paroole salvestama?
Mitte kunagi loetaval kujul. Kui kasutad e-posti ja parooliga sisselogimist, tuleb paroolid salvestada soolatud räsidena, mis on tehtud paroolide jaoks mõeldud aeglase algoritmiga, näiteks Argon2 või bcrypt. Paljud rakendused väldivad seda probleemi, kasutades hostitud autentimisteenust, sotsiaalset sisselogimist või e-kirjas olevaid ühekordseid linke.
Sessioonid või žetoonid – mida minu rakendus peaks kasutama?
Mõlemad töötavad. Sessioon hoiab sisselogimise olekut serveris ja annab brauserile küpsises juhusliku ID-i, mida on lihtne tühistada. Žeton, näiteks JWT, kannab allkirjastatud infot ise, mis sobib API-de ja mobiiliklientide jaoks, kuid seda on raskem enne aegumist tühistada. Tüüpilise veebirakenduse jaoks on küpsisepõhised sessioonid mõistlik vaikeseade.