Strategii pentru autentificarea pe un REST API: Basic Auth și API Keys
Două scheme simple de autentificare pentru API-uri
Atunci când proiectăm un API, una dintre cele mai importante decizii este metoda de autentificare pentru clienți. Fie aplicații interne - mobile sau desktop, sau dezvoltate de un public mai larg pentru API-uri deschise.
În ultimul deceniu, API-urile REST au devenit o abordare arhitecturală de facto pentru platformele moderne de aplicații web și mobile. Prin separarea nivelului de date și cel de prezentare, au permis sistemelor să scaleze la ordinul de milioane de utilizatori. Însă odată cu creșterea, distribuția și accesul la date a ajutat la stabilirea unor standarde, cu beneficii și limitări de securitate bine cunoscute. În acest articol voi discuta despre două dintre acestea:
Basic HTTP authentication
Așa cum îi spune numele această metodă de autentificare este una care folosește un mecanism foarte simplu: user și parolă trimise prin header-ul HTTP Authorization. Această metodă are avantajul de a fi foarte simplu de implementat, atât pe partea de server cât și pe cea de client prin adăugarea header-ului în cererile HTTP:
X-Client-Version: 1.34
Authorization: Basic YmFzaWMtYXV0aA==
Din păcate această metodă prezintă câteva dezavantaje, și aș dori să încep cu cele de securitate: utilizatorul și parola sunt trimise decriptate. Mai exact transpuse în base64. De aceea această schemă de autentificare este viabilă doar sub HTTPS - protocol care criptează datele în tranzit. O altă inconveniență a acestei scheme este faptul că pentru fiecare utilizator este nevoie să creezi o parolă, și deci dacă ai trei aplicații pentru aceeași organizație care au nevoie de acces la API, va fi nevoie să generezi trei utilizatori diferiți.
Cu toate acestea, ținând cont de ușurința în implementare și de faptul că poate fi gestionată pe server, este o strategia viabilă când este combinată cu alte nivele de securitate: HTTPS și access prin VPN, iar numărul de utilizatori ai API-ului este foarte mic, până la 100 de clienți.
Chei (API keys)
Cheile de acces, sunt o variantă mai flexibilă și prezintă două avantaje față de Basic auth:
pot fi generate și revocate fără a fi necesar să generăm un utilizator nou
pot fi criptate de client, și deci trimise criptate
Implementarea și gestionarea acestei strategii necesită cod pentru validarea cheilor, sau se poate folosi o soluție de API Gateway. Pentru clienți autentificarea este la fel de simplă ca și în cazul basic auth:
Desigur, în cazul în care este necesară criptarea credențialelor se mai adaugă și un pas de criptare:
La fel ca în cazul basic auth, credențialele pot fi interceptate dacă nu sunt criptate, și de aceea și autentificarea prin cheie API este considerată sigură doar dacă se comunică prin HTTPS.
Printre alte limitări ale acestor două strategii se numără și faptul că prin design nu suportă extinderea cu alte mecanisme de autentificare cum ar fi Multi-factor (MFA).
Voi reveni într-un articol viitor cu alte două strategii de autentificare, respectiv HMAC și OAuth. Acestea folosesc chei de criptare și oferă nivele superioare de securitate.
Referințe:
Atribuții:
Imaginea articolului a fost descărcată de pe Freepik.