Junior
Hogyan zajlik az azonosítási folyamat?
sobes.tech MI
Válasz az MI-től
A felhasználói hitelesítési folyamat a frontend alkalmazásban általánosságban a következő lépésekből áll:
- Adatok kérés: A felhasználó beírja a felhasználónevet és jelszót a weboldalon vagy az alkalmazásban található űrlapba.
- Adatok küldése a szervernek: A frontend elküldi ezeket az adatokat a szervernek (backend) HTTP-kéréssel (általában
POST) egy speciális hitelesítési végponton. Az adatok JSON vagy FormData formátumban küldhetők a kérés törzsében. - Adatok ellenőrzése a szerveren: A backend megkapja az adatokat, ellenőrzi azokat saját adatbázisában (például, hogy a felhasználónév létezik-e, és a megadott jelszó hash-e egyezik-e a tárolt hash-sel).
- Token/Session generálása: Ha az adatok helyesek, a szerver egyedi hitelesítési tokent generál. Ez lehet:
- Session ID: A szerver létrehoz egy session-t, és összekapcsolja a felhasználóval, majd a kliensnek küldi a session azonosítót (például
HttpOnlycookie-ban). - Token (pl. JWT): A szerver generál egy tokent, amely tartalmazza a felhasználói információkat és jogosultságokat, aláírva a saját titkos kulcsával. Ezt a tokent a kliens kapja.
- Session ID: A szerver létrehoz egy session-t, és összekapcsolja a felhasználóval, majd a kliensnek küldi a session azonosítót (például
- Token/session küldése a kliensnek: A szerver válaszol a frontendnek, elküldve a generált hitelesítési tokent.
- Ha session ID-t használnak, általában
Set-CookieHTTP fejlécben kerül kiküldésre. - Ha tokent használnak, az kérés törzsében (JSON) vagy az
Authorizationfejlécben (Bearer <token>) adható át.
- Ha session ID-t használnak, általában
- A token tárolása a kliens oldalon: A frontend megkapja a tokent, és elmenti a későbbi kérésekhez.
- A session ID automatikusan tárolódik a böngésző cookie-k között.
- A tokent tárolhatják
localStorage,sessionStoragevagy cookie-k között (HttpOnlyflag-gel a XSS elleni védelem érdekében). AjánlottHttpOnlycookie-kat használni a hozzáférési tokenekhez, mivel ez csökkenti a token lopásának kockázatát XSS támadások esetén. A JWT tokenekhez is tárolhatók frissítő tokenekHttpOnlycookie-kban.
- A token használata védett kérésekhez: A későbbi kérésnél a frontend elküldi a tárolt tokent minden kérésben.
- A böngésző automatikusan elküldi a session cookie-kat.
- A tokenek esetén a frontend explicit módon hozzáadja a tokent az
Authorizationfejléchez (Authorization: Bearer <token>).
- Token ellenőrzése a szerveren: Minden védett kérésnél a szerver kivonja a tokent a kérésből, és ellenőrzi a hitelességét (pl. a token érvényességi ideje, aláírás, session megléte).
- Jogosultság ellenőrzése: Ha a token érvényes, a szerver meghatározza a tokent kötött felhasználót, és ellenőrzi jogosultságait a kéréshez.
- A kérés végrehajtása: Ha a felhasználó hitelesített és jogosult, a szerver végrehajtja a kérést, és választ küld. Ellenkező esetben hibát (pl.
401 Unauthorizedvagy403 Forbidden) küld.
A hitelesítési sémák különbözőek lehetnek (session alapú, JWT tokenek, OAuth2, OpenID Connect stb.), de az alapvető lépések a token megszerzéséhez és felhasználásához hasonlóak.
Példa a szerver felé küldött adatokra (fetch API és token használatával):
// Felhasználói adatok példája
const userData = {
username: 'user123',
password: 'securepassword'
};
// Adatok küldése a szervernek
fetch('/api/login', { // Hitelesítési végpont a szerveren
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userData)
})
.then(response => {
if (!response.ok) {
throw new Error('Bejelentkezés sikertelen');
}
return response.json(); // Várjuk, hogy a szerver JSON-t adjon vissza a tokennel
})
.then(data => {
const authToken = data.token; // A token kinyerése a válaszból
localStorage.setItem('authToken', authToken); // A token elmentése (pl. localStorage-ban)
console.log('Sikeres bejelentkezés, token elmentve.');
// Felhasználó átirányítása védett oldalra
})
.catch(error => {
console.error('Hitelesítési hiba:', error);
// Hibaüzenet megjelenítése a felhasználónak
});
// Védett kérés példája a mentett tokennel
const token = localStorage.getItem('authToken');
if (token) {
fetch('/api/protected-resource', {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}` // A token hozzáadása az Authorization fejléchez
}
})
.then(response => {
if (!response.ok) {
if (response.status === 401) {
console.log('A token lejárt vagy érvénytelen. Átirányítás a bejelentkezéshez.');
// A token érvénytelen, törlés és átirányítás
localStorage.removeItem('authToken');
// window.location.href = '/login';
}
throw new Error('Védett erőforrás lekérése sikertelen');
}
return response.json();
})
.then(data => {
console.log('Védett adatok:', data);
})
.catch(error => {
console.error('Hiba a védett erőforrás lekérésekor:', error);
});
} else {
console.log('Nincs hitelesítési token. Átirányítás a bejelentkezéshez.');
// window.location.href = '/login';
}
Biztonsági szempontok:
- Mindig használjon HTTPS-t az adatok és tokenek küldésekor.
- Biztonságosan tárolja a tokeneket (kerülje a érzékeny adatok, például jelszavak vagy hozzáférési tokenek nyilvános kódba vagy nyitott mezőkbe helyezését).
- JWT tokenek esetén: rövid lejárati időt használjon a hozzáférési tokenekhez, és frissítse azokat frissítő tokenekkel, amelyek
HttpOnlycookie-kban tárolódnak. A hozzáférési tokeneket tárolhatja a memória vagy localStorage-ban, de figyelembe kell venni az XSS kockázatokat. - Minden adatot a szerveren validáljon.