Mi a hitelesítés? Bejelentkezés, munkamenetek és OAuth magyarázattal
A hitelesítés az, ahogy egy app megerősíti, ki a felhasználó – általában valamit ellenőriz, amit ő tud (jelszót), vagy amije van (telefonra vagy e-mailbe küldött kódot), vagy egy másik megbízható szolgáltatótól származó identitást (például a „Bejelentkezés Google-lel” funkciót). Miután a felhasználó hitelesítve lett, az app munkamenettel vagy tokennel emlékszik rá, hogy ne kelljen minden oldalon újra bejelentkeznie. Az, hogy a megismert felhasználó mit tehet, külön lépés, amelyet jogosultságkezelésnek (authorization) hívnak.
Miért fontos, ha AI-val építesz
A bejelentkezés hozzáadása az egyik leggyakoribb kérés egy AI-építőnél, és az egyik legkönnyebben finoman elrontható dolog. Egy bejelentkező oldalt könnyű legenerálni. A nehéz rész mindaz, ami körülötte van:
- Biztonságosan vannak-e tárolva a jelszavak?
- Minden privát oldal és minden API-végpont ellenőrzi-e valóban, ki kéri?
- Láthat-e egy bejelentkezett vásárló más vásárló adatait azzal, hogy átírja a számot az URL-ben?
- Mi történik, ha valaki elfelejti a jelszavát?
Egy app kívülről tökéletesen biztonságosnak tűnhet, miközben mindegyik ponton elbukik. A működő részek megértése segít abban, hogy a megfelelő kérdéseket tedd fel és a megfelelő dolgokat teszteld.
Mindennapi hasonlat
Gondolj arra, amikor szállodába jelentkezel be.
A recepción felmutatod az igazolványodat. Ez a hitelesítés: bizonyítod, ki vagy. A recepciós ezután kulcskártyát ad. Ez a kártya a munkameneted: a tartózkodásod hátralévő részében nem kell újra igazolványt mutatnod, csak a kártyát érintened.
A kártya kinyitja a szobádat, az edzőtermet és a liftet a szintedre – de nem a többi vendég szobáját vagy az irodát. Ez a jogosultságkezelés: hogy az azonosságod mihez férhet hozzá. Ha elveszíted a kártyát, a szálloda a pultnál deaktiválhatja (ez a munkamenet visszavonása). Kijelentkezéskor vagy lejáratkor megszűnik a működése.
A „Bejelentkezés Google-lel” olyan, mintha a szálloda egy megbízható partnertől kapott levélre hagyatkozna, amely szerint „ez az illető”, ahelyett, hogy maga ellenőrizné az igazolványodat.
A fő bejelentkezési módszerek
| Módszer | Hogyan működik | Előnyök | Hátrányok |
|---|---|---|---|
| E-mail + jelszó | A felhasználó jelszót választ; az app ennek hash-ét tárolja | Ismerős, nincs külső függőség | A hash-eket biztonságosan kell tárolni, és kezelni kell a visszaállítást |
| Mágikus link / egyszer használatos kód | Az app e-mailben küld egy linket vagy kódot, amely bejelentkezteti a felhasználót | Nincs jelszó, amit ellophatnak vagy elfelejthetnek | Függ az e-mail-kézbesítéstől; lassabb a bejelentkezés |
| Közösségi bejelentkezés (OAuth / OpenID Connect) | A felhasználó Google-lel, Apple-lel, GitHub-bal stb. jelentkezik be | Gyors a felhasználóknak; te nem tárolsz jelszót | Minden szolgáltatónál be kell állítani; nincs meg mindenkinek az adott fiókja |
| Hosztolt hitelesítési szolgáltató | Olyan szolgáltatás, mint a Clerk, az Auth0 vagy a Supabase Auth, kezeli a regisztrációt, a bejelentkezést és a visszaállítást | Kevesebb biztonsági munka neked | Nagyobb méretnél havi díj; újabb függőség |
| Többfaktoros (MFA / 2FA) | Az első után egy második ellenőrzés, például hitelesítő-appból kapott kód | Sokkal nehezebb feltörni | Kicsit több lépés |
Hogyan kell tárolni a jelszavakat
Egy biztonságos app soha nem tárolja a tényleges jelszavadat. Helyette egy hash-t tárol: egy visszafordíthatatlan függvény kimenetét, amely a jelszót fix hosszúságú sztringgé alakítja. Bejelentkezéskor az app hash-eli, amit beírtál, és összehasonlítja az eredményt a tárolt hash-sel.
Két részlet teszi ezt biztonságossá:
- Só (salt) – egy véletlenszerű érték, amelyet minden jelszóhoz hozzáadnak a hash-elés előtt, így két ember azonos jelszava is különböző hash-t ad, és az előre kiszámolt keresőtáblák haszontalanok.
- Lassú, jelszavakhoz készült algoritmus – például Argon2, bcrypt vagy scrypt. Az általános célú hash-ek, mint az MD5 vagy a SHA-256, önmagukban túl gyorsak; a támadók milliárdnyi tippet próbálhatnak ki.
A hash-elés nem ugyanaz, mint a titkosítás. A titkosított adat kulccsal visszafejthető; a jelszó-hash úgy készült, hogy egyáltalán ne legyen visszafordítható.
Munkamenetek vs tokenek
Bejelentkezés után az appnak minden kérésnél fel kell ismernie téged. Két gyakori megközelítés van.
| Munkamenet (süti) | Token (pl. JWT) | |
|---|---|---|
| Mit tart a böngésző | Egy véletlenszerű munkamenet-azonosítót sütiben | Aláírt tokent, amely felhasználói adatot és lejárati időt tartalmaz |
| Hol él a bejelentkezési állapot | A szerveren, adatbázisban vagy tárolóban | Magában a tokenben |
| Kijelentkeztetés mindenhonnan | Könnyű: a szerveren töröljük a munkamenetet | Nehezebb: a token addig érvényes, amíg le nem jár, hacsak nem vezetsz tiltólistát |
| Tipikus használat | Hagyományos webappok | API-k, mobilappok, egymással beszélgető szolgáltatások |
Sütiknél három beállítás számít: HttpOnly (az oldalon futó JavaScript nem olvashatja a sütit), Secure (csak HTTPS-en küldődik) és SameSite (korlátozza a küldést más oldalakról érkező kérésekben). A tokenek böngészős localStorage-ban való tárolása gyakori, de így bármely, az oldalon futó szkript hozzáfér.
OAuth és a „Bejelentkezés Google-lel”
Az OAuth 2.0 delegált jogosultságkezelés szabványa: lehetővé teszi, hogy egy app korlátozott hozzáférést kapjon a fiókodhoz egy másik szolgáltatásnál – mondjuk a Google-naptáradat olvasásához –, anélkül hogy valaha látná a Google-jelszavadat. A Google-hoz irányítanak, te jóváhagyod a konkrét engedélyeket (ezeket scope-oknak hívják), a Google pedig csak ezekre az engedélyekre szóló tokent ad az appnak.
Az OAuth önmagában arra készült, hogy hozzáférést adjon, nem arra, hogy megmondja, ki vagy. Az OpenID Connect (OIDC) az OAuth 2.0 fölé épülő réteg, amely identitást ad hozzá – ezt használja a „Bejelentkezés Google-lel” vagy az „Bejelentkezés Apple-lel”. A beállításhoz regisztrálod az appodat a szolgáltatónál, és kapsz egy kliensazonosítót (client ID) és egy kliens titkot (client secret); a titok a szerveren marad.
Példa: bejelentkezés egy ügyfélportálhoz
Tegyük fel, hogy egy tervezőirodának portált építesz, ahol az ügyfelek látják a projektjeiket és számláikat.
- Hitelesítés: az ügyfelek e-mailben és mágikus linkkel jelentkeznek be, így nincs kezelendő jelszó. Az iroda munkatársai Google Workspace-fiókokkal jelentkeznek be.
- Szerepkörök: minden felhasználónak van egy szerepköre –
clientvagystaff. - Jogosultsági szabályok:
| Művelet | Ügyfél | Munkatárs |
|---|---|---|
| Saját cégük projektjeinek megtekintése | Igen | Igen |
| Más cégek projektjeinek megtekintése | Nem | Igen |
| Fájl feltöltése egy projekthez | Csak a saját projektekhez | Igen |
| Számla megjelölése fizetettként | Nem | Igen |
- Hol érvényesül: a szerveren, minden kérésnél. A szerver megkeresi a bejelentkezett felhasználót, majd csak azokat a projekteket adja vissza, ahol a
project.company_idegyezik a felhasználó cégével. Nem elég elrejteni a „Fizetettnek jelöl” gombot – a végpontnak magának kell megtagadnia.
Gyakori fogalmak magyarázata
| Fogalom | Jelentés |
|---|---|
| Hitelesítés (AuthN) | Annak megerősítése, ki valaki. |
| Jogosultságkezelés (AuthZ) | Annak eldöntése, mit tehet. |
| Munkamenet | Az app emlékezése arra, hogy be vagy jelentkezve, a kérések között. |
| Süti | Egy kis adatdarab, amelyet a böngésző minden kéréssel visszaküld az oldalnak. |
| JWT | JSON Web Token: aláírt, tömör token, amely olyan állításokat hordoz, mint a felhasználói azonosító és a lejárat. |
| Szerepkör / jogosultság | Olyan címkék, mint az admin vagy a member, amelyek eldöntik a hozzáférést. |
| MFA / 2FA | Második igazolás megkövetelése, például hitelesítő-appból érkező kód. |
| SSO | Egyszeri bejelentkezés: egy belépés (gyakran céges fiókkal) sok appba. |
| 401 vs 403 | „Ki vagy?” (nincs hitelesítve) vs „Ezt nem teheted” (nincs jogosultságod). |
Gyakori hibák és tévhitek
- Jogosultság ellenőrzése csak az oldalon. Ha a böngésző elrejt egy gombot, de az API nem ellenőriz, bárki közvetlenül hívhatja az API-t.
- Az URL-ben szereplő azonosítókban bízni. A
/invoices/1042esetén ellenőrizni kell, hogy az 1042-es számla a bejelentkezett felhasználóé. - Saját kriptográfia írása. Jól ismert könyvtárakat vagy szolgáltatókat használj; ne engedd, hogy az AI kitaláljon egy hash-sémát.
- Gyenge jelszó-visszaállítás. A visszaállító linkek legyenek egyszer használhatók, gyorsan járjanak le, és ne áruljanak el, van-e fiók az e-mail-címhez.
- Összekeverni a saját bejelentkezésed az építőeszközével. Az app felhasználói különállnak a fiókodtól az eszközön, amellyel építed.
- Nincs korlátozás a bejelentkezési próbálkozásokra. Enélkül a támadók végtelenül próbálkozhatnak jelszavakkal.
Mit kérj az AI-építőtől
- „Adj regisztrációt és bejelentkezést [egy jól ismert könyvtárral vagy szolgáltatóval]. Ne írj egyedi jelszó-hash-elést.”
- „A jelszavakat bcrypt vagy Argon2 segítségével hash-eld és tárold.”
- „A munkamenethez HttpOnly, Secure sütiket használj.”
- „Adj szerepköröket: admin és member. Sorold fel minden végpontot, és hogy melyik szerepkör hívhatja.”
- „A szerveren érvényesítsd, hogy a felhasználók csak a saját rekordjaikat láthassák és szerkeszthessék. Utána mutasd meg, hogyan ellenőrizted.”
- „Adj jelszó-visszaállítást egyszer használható linkekkel, amelyek egy óra múlva lejárnak.”
- „Korlátozd a bejelentkezési próbálkozások számát.”
Utána teszteld magad: hozz létre két fiókot, és próbáld meg az egyik bejelentkezve elérni a másik adatait. A bejelentkezés hozzáadásáról szóló útmutató és a biztonsági ellenőrzőlista tovább visz.
Hitelesítés a Mythexben
A Mythex nem ad beépített hitelesítési terméket az appod felhasználóinak; te választasz egy megközelítést – e-mail és jelszó az appod projektadatbázisában tárolva (adatbázis), vagy egy hosztolt szolgáltató SDK-ja –, és megkéred az ügynököt, hogy adja hozzá. A szolgáltatói kulcsok projekt-titkokba kerülnek, nem a chatbe. Ez különbözik attól, ahogy magába a Mythexbe jelentkezel be. A dokumentációs recept a bejelentkezés hozzáadásáról az appodhoz egy átalakítható kezdő promptot tartalmaz, a mi az API pedig elmagyarázza, hol élnek ezek a szerveroldali ellenőrzések.
Kérdések
Mi a különbség a hitelesítés és a jogosultságkezelés között?
A hitelesítés azt ellenőrzi, ki vagy, például a jelszavad megerősítésével. A jogosultságkezelés azt dönti el, mit tehetsz, miután ismert vagy, például hogy láthatod-e az adminisztrációs oldalt, vagy szerkesztheted-e valaki más foglalását. Az appoknak mindkettőre szükségük van.
Mi az OAuth?
Az OAuth 2.0 egy szabvány, amely lehetővé teszi, hogy egy app korlátozott hozzáférést kapjon a fiókodhoz egy másik szolgáltatásnál anélkül, hogy látná a jelszavadat. A „Bejelentkezés Google-lel” az OpenID Connectet használja, egy identitási réteget, amely az OAuth 2.0-ra épül, így az app a Google-től tudja meg, ki vagy.
Tárolnia kell az appomnak jelszavakat?
Soha olvasható formában. Ha e-mailes és jelszavas bejelentkezést használsz, a jelszavakat sózott hash-ként kell tárolni, jelszavakhoz tervezett lassú algoritmussal, például Argon2-vel vagy bcrypt-tel. Sok app elkerüli a problémát hosztolt hitelesítési szolgáltatóval, közösségi bejelentkezéssel vagy e-mailes egyszer használatos linkekkel.
Munkamenetet vagy tokent használjon az appom?
Mindkettő működik. A munkamenet a bejelentkezési állapotot a szerveren tárolja, a böngészőnek pedig egy véletlenszerű azonosítót ad sütiben, amelyet könnyű visszavonni. A token, például a JWT, aláírt információt hordoz magában, ez API-khoz és mobilkliensekhez illik, de lejárat előtt nehezebb visszavonni. Egy tipikus webappnál a sütin alapuló munkamenet jó alapértelmezés.