Autentificarea este procesul prin care API-ul verifică identitatea clientului înainte de a procesa orice cerere. Fără ea, oricine poate accesa date sensibile sau modifica resurse critice, transformând aplicația într-o țintă ușoară pentru atacatori. Ignorarea acestei practici expune sistemul la riscuri majore de furt de date, fraudă și încălcări grave ale conformității (GDPR). Este fundamentul securității, asigurând că doar utilizatorii autorizați interacționează cu infrastructura ta.
Cum o aplici
- Alege un standard: Folosește JWT (JSON Web Tokens) pentru stateless APIs sau OAuth 2.0 pentru integrări complexe. Evită autentificarea bazată pe sesiuni simple în cookie-uri pentru API-uri mobile sau SPA-uri, dacă nu este strict necesar.
- Implementează middleware-ul de validare: Creează un strat intermediar care interceptează fiecare cerere HTTP, extrage token-ul din header-ul
Authorizationși validează semnătura sa criptografică. - Protejează credențialele: Nu stoca niciodată parolele în text clar. Folosește algoritmi de hash robuste precum bcrypt, Argon2 sau scrypt.
- Aplică principiul dreptului minim: Asigură-te că token-ul conține doar permisiunile necesare pentru acțiunea curentă (RBAC - Role-Based Access Control).
Exemplu
Varianta incorectă expune ID-ul utilizatorului direct în URL, fără verificare:
GET /api/users/123/profile
Varianta corectă folosește un Bearer Token validat și verifică rolul utilizatorului:
GET /api/users/me/profile
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
În backend (pseudo-cod Node.js):
// Incorect: Acces direct la resursa altcuiva
app.get('/users/:id', (req, res) => {
const user = db.find(req.params.id); // Orice cineva poate vedea profilul oricui
});
// Corect: Verificare token și proprietate
app.get('/profile', authenticateToken, (req, res) => {
if (req.user.id !== req.userIdFromToken) {
return res.status(403).send('Acces interzis');
}
res.json(req.user.profile);
});
Cum verifici
- Teste automate: Scrie teste unitare care încearcă accesul la endpoint-uri protejate fără token, cu token expirat sau cu token invalid. Acestea trebuie să returneze
401 Unauthorized. - Scanning de securitate: Folosește instrumente precum OWASP ZAP sau Burp Suite pentru a detecta endpoint-uri lipsite de protecție.
- Audit log-uri: Monitorizează numărul de cereri respinse din cauza autentificării eșuate. Un spike neobișnuit poate indica o încercare de brute-force.
Greșeli frecvente
- Validarea superficială: Acceptarea token-urilor fără a verifica semnătura digitală sau data expirării (
exp). - Stocarea token-urilor în localStorage: Pentru aplicațiile web, localStorage este vulnerabil la XSS (Cross-Site Scripting). Preferă cookie-uri
HttpOnlyșiSecure. - Expirarea lungă a token-urilor: Un JWT cu valabilitate de ani de zile creează un risc enorm dacă este furat. Folosește access tokens cu viață scurtă (ex: 15 min) și refresh tokens pentru reînnoire.
Resurse gratuite
Subteme
- Folosește OAuth 2.1 și OpenID Connect, nu scheme de autentificare proprii
- Folosește fluxul Authorization Code cu PKCE pentru toți clienții
- Nu folosi fluxurile Implicit și Resource Owner Password Credentials
- Stochează parolele cu Argon2id sau bcrypt, niciodată în clar
- Oferă MFA și passkeys (WebAuthn) pentru conturile utilizatorilor
- Returnează mesaje generice la eșecul autentificării, fără enumerare de conturi
- Folosește token-uri de resetare a parolei unice, aleatorii și cu expirare scurtă
- Tratează cheile API ca secrete: scope limitat, rotație și revocare