Junior
Ako prebieha proces overovania?
sobes.tech AI
Odpoveď od AI
Proces overenia používateľa v frontendovej aplikácii zvyčajne pozostáva z nasledujúcich krokov:
- Žiadosť o prihlasovacie údaje: Používateľ zadá svoje používateľské meno a heslo do formulára na stránke alebo v aplikácii.
- Odoslanie údajov na server: Frontend odošle tieto údaje na server (backend) pomocou HTTP požiadavky (zvyčajne
POST) na špeciálny endpoint na overenie. Dáta môžu byť odoslané v tele požiadavky vo formáte JSON alebo FormData. - Kontrola údajov na serveri: Backend prijme údaje, skontroluje ich v svojej databáze (napríklad, či používateľské meno existuje a či hash zadaného hesla zodpovedá uloženému hash-u).
- Generovanie tokenu/sesie: Ak sú údaje správne, server vygeneruje unikátne overovacie označenie. Môže to byť:
- ID relácie: Server vytvorí reláciu a spojí ju s používateľom, odosielajúc klientovi identifikátor relácie (napríklad v
HttpOnlycookie). - Token (napríklad JWT): Server vygeneruje token obsahujúci informácie o používateľovi a jeho právach, podpísaný jeho tajným kľúčom. Tento token je odoslaný klientovi.
- ID relácie: Server vytvorí reláciu a spojí ju s používateľom, odosielajúc klientovi identifikátor relácie (napríklad v
- Odoslanie tokenu/sesie klientovi: Server odpovie frontend-u, odoslaním vygenerovaného overovacieho tokenu.
- Ak sa používa ID relácie, zvyčajne sa odovzdáva v
Set-Cookiehlavičke. - Ak sa používa token, môže byť odoslaný v tele odpovede (JSON) alebo v hlavičke
Authorization(Bearer <token>).
- Ak sa používa ID relácie, zvyčajne sa odovzdáva v
- Uloženie tokenu na klientovi: Frontend dostane token a uloží ho pre budúce požiadavky.
- ID relácie sa zvyčajne automaticky ukladá v cookies prehliadača.
- Token môže byť uložený v
localStorage,sessionStoragealebo cookies (s flagomHttpOnlyna ochranu pred XSS). Odporúča sa používaťHttpOnlycookies pre tokeny prístupu, pretože to znižuje riziko krádeže tokenu cez XSS.
- Použitie tokenu pre chránené požiadavky: Pri vykonávaní ďalších požiadaviek na chránené zdroje (vyžadujúce overenie), frontend odosiela uložený token v každej požiadavke.
- Pre relácie, prehliadač automaticky odosiela príslušné cookies s ID relácie.
- Pre tokeny, frontend musí explicitne pridať token do hlavičky
Authorization(napríkladAuthorization: Bearer <token>).
- Kontrola tokenu na serveri: Pri prijatí každej požiadavky na chránený zdroj, server extrahuje token z požiadavky a overí jeho pravosť (napríklad, platnosť tokenu, podpis tokenu, prítomnosť relácie s takým ID).
- Autorizácia: Ak je token platný, server určí používateľa spojeného s týmto tokenom a overí jeho práva na prístup k požadovanému zdroju (toto je už proces autorizácie, nasledovný po overení).
- Vykonanie požiadavky: Ak je používateľ overený a má práva, server vykoná požiadavku a odošle odpoveď. Inak server odošle chybu (napríklad
401 Unauthorizedalebo403 Forbidden).
Schémy overovania sú rôzne (na základe relácií, JWT tokenov, OAuth2, OpenID Connect atď.), ale základné kroky získania a použitia tokenu na identifikáciu používateľa zostávajú podobné.
Príklad odoslania údajov na server (s použitím fetch API a tokenu):
// Príklad údajov používateľa
const userData = {
username: 'user123',
password: 'securepassword'
};
// Odoslanie údajov na server
fetch('/api/login', { // Endpoint na overenie na serveri
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userData)
})
.then(response => {
if (!response.ok) {
throw new Error('Prihlásenie zlyhalo');
}
return response.json(); // Očakávame, že server vráti JSON s tokenom
})
.then(data => {
const authToken = data.token; // Získanie tokenu z odpovede
localStorage.setItem('authToken', authToken); // Uloženie tokenu (napríklad v localStorage)
console.log('Prihlásenie úspešné, token uložený.');
// Presmerovanie používateľa na chránenú stránku
})
.catch(error => {
console.error('Chyba autentifikácie:', error);
// Zobraziť správu o chybe používateľovi
});
// Príklad chráneného požiadavku s použitím uloženého tokenu
const token = localStorage.getItem('authToken');
if (token) {
fetch('/api/protected-resource', {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}` // Pridanie tokenu do hlavičky Authorization
}
})
.then(response => {
if (!response.ok) {
if (response.status === 401) {
console.log('Token vypršal alebo je neplatný. Preusmerenie na login.');
// Token je neplatný, vymazať token a preusmeriť na login
localStorage.removeItem('authToken');
// window.location.href = '/login';
}
throw new Error('Nepodarilo sa načítať chránený zdroj');
}
return response.json();
})
.then(data => {
console.log('Chránené údaje:', data);
})
.catch(error => {
console.error('Chyba pri načítaní chráneného zdroja:', error);
});
} else {
console.log('Nenašiel sa žiadny auth token. Preusmerenie na login.');
// window.location.href = '/login';
}
Dôležité aspekty bezpečnosti:
- Vždy používajte HTTPS na odosielanie údajov a tokenov, aby ste zabránili zachyteniu.
- Bezpečne ukladajte tokeny (vyhýbajte sa ukladaniu citlivých informácií, ako sú heslá alebo tokeny prístupu, priamo v kóde alebo otvorených poliach).
- Pre JWT tokeny: používajte krátky čas platnosti pre tokeny prístupu a aktualizujte ich pomocou tokenov na obnovenie, ktoré sa ukladajú v
HttpOnlycookies. Prístupové tokeny môžete ukladať do pamäte alebo localStorage, ale je potrebné zvážiť riziká XSS. - Validujte všetky údaje na serveri.