de Ramesh Lingappa

Cele mai bune practici pentru crearea unor chei API sigure

Cele mai bune practici pentru crearea unor chei API sigure

Știm cu toții cât de valoroase sunt API-urile. Ele sunt poarta către explorarea altor servicii, integrarea cu acestea și construirea de soluții excelente mai rapid.

Este posibil să fi construit sau să vă gândiți să creați API-uri pentru alți dezvoltatori. Un API are nevoie de o formă de autentificare pentru a oferi acces autorizat la datele pe care le returnează.

Există mai multe standarde de autentificare disponibile astăzi, cum ar fi cheile API, OAuth, JWT, etc.

În acest articol, vom analiza cum să gestionați corect cheile API pentru a accesa API-urile.

Deci, de ce tastele API?

Cheile API sunt ușor de utilizat, sunt scurte, statice și nu expiră decât dacă sunt revocate. Acestea oferă o modalitate ușoară de comunicare a mai multor servicii.

Dacă furnizați un API pentru consumul clienților dvs., este esențial să îl construiți în modul corect.

Să începem și vă voi arăta cum să creați cheile API în modul corect.

Generarea de chei API

Deoarece cheia API în sine este o identitate prin care se identifică aplicația sau utilizatorul, trebuie să fie unică, aleatorie și care nu poate fi ghicită. Cheile API care sunt generate trebuie să utilizeze și caractere alfanumerice și speciale. Un exemplu de astfel de cheie API este zaCELgL.0imfnc8mVLWwsAawjYr4Rx-Af50DDqtlx.

Stocare securizată a cheilor API

Deoarece cheia API oferă acces direct la date, seamănă cu o parolă pe care o oferă un utilizator al unei aplicații web sau mobile pentru a avea acces la aceleași date.

Gandeste-te la asta. Motivul pentru care trebuie să stocăm cheile API este să ne asigurăm că cheia API din cerere este validă și emisă de noi (la fel ca o parolă).

Nu trebuie să cunoaștem cheia API brută, ci trebuie doar să confirmăm că cheia este corectă. Deci, în loc să stocăm cheia în text simplu (greșit) sau să o criptăm, ar trebui să o stocăm ca o valoare hash în baza noastră de date.

O valoare hash înseamnă că, chiar dacă cineva obține acces neautorizat la baza noastră de date, nu se scurg niciun cheie API și totul este sigur. Utilizatorul final va trimite cheia API brută în fiecare cerere API și o putem valida prin hashing cheia API în cerere și comparăm cheia hash cu hash-ul stocat în baza noastră de date. Iată o implementare brută a acestuia în Java:

În codul de mai sus, cheia principală va fi o combinație a prefixului și a hashului cheii API {prefix}.{hash_of_whole_api_key}.

Dar stai, există mai multe. Stocarea unei valori hash aduce probleme specifice de utilizare. Să ne adresăm celor acum.

Prezentarea cheii API utilizatorilor

Deoarece nu stocăm cheia API originală, o putem afișa o singură dată utilizatorului, în momentul creării. Așadar, asigurați-vă că avertizați utilizatorii că nu poate fi recuperat din nou și trebuie să genereze un nou simbol dacă uită să copieze cheia API și să o stocheze în siguranță. Puteți face așa ceva:

1612083968 327 Cele mai bune practici pentru crearea unor chei API sigure
Se afișează cheia API generată cu un mesaj de alertă

Modul în care utilizatorii pot identifica o cheie API generată ulterior

O altă problemă este modul în care utilizatorii identifică cheia API potrivită în consola dvs. dacă trebuie să o editeze sau să o revoce. Acest lucru poate fi rezolvat prin adăugarea unui prefix la cheia API. Observați în imaginea de mai sus primele 7 caractere (acesta este prefixul nostru), separate prin punct.

Acum puteți stoca acest prefix în baza de date și îl puteți afișa în consolă, astfel încât utilizatorii să poată identifica rapid intrarea corectă a cheii API, astfel:

1612083968 692 Cele mai bune practici pentru crearea unor chei API sigure
Consolă de gestionare a cheilor API

Nu acordați cheii API toată puterea

O eroare comună pe care o fac furnizorii de chei API este furnizarea o cheie pentru a accesa totul, deoarece este ușor de gestionat. Nu face asta. Să presupunem că un utilizator trebuie doar să citească un e-mail și generează o cheie API. Dar acea cheie are acum acces complet la alte servicii, inclusiv ștergerea înregistrărilor din baza de date.

dreapta abordarea este de a permite utilizatorilor finali să restricționeze corect accesul la cheia API și să aleagă acțiuni specifice pe care o cheie API le poate efectua. Acest lucru se poate face prin furnizarea scopuri, unde fiecare domeniu reprezintă o permisiune specifică.

De exemplu,

  • dacă aveți nevoie de o cheie API pentru a trimite doar e-mailuri, puteți genera o cheie API cu scopul ca. „Email.send”
  • dacă utilizatorul final are mai multe servere și fiecare efectuează o acțiune specifică, atunci se poate genera o cheie API separată cu un anumit domeniu de aplicare.

Deci, în timp ce creați cheia API, permiteți utilizatorilor să selecteze ce acces ar trebui să aibă cheia API, ca în imaginea de mai jos.

1612083968 86 Cele mai bune practici pentru crearea unor chei API sigure

Astfel, utilizatorii pot genera mai multe chei API, fiecare cu reguli de acces specifice pentru o mai bună securitate. Și când se primește o cerere API, puteți verifica dacă cheia API are domeniul de aplicare potrivit pentru a accesa acel API. Acum baza de date arată cam așa:

1612083969 0 Cele mai bune practici pentru crearea unor chei API sigure
Entitate bază de date cheie API

Cheile API care limitează rata

Da, s-ar putea să știți deja acest lucru, dar este important să evaluați cererile limită făcute cu chei API specifice pentru a vă asigura că niciun actor rău nu vă poate elimina serverele API sau poate cauza probleme de performanță care vă afectează ceilalți clienți. Având o soluție adecvată de limitare a ratei și monitorizare menține serviciul API sănătos.

Concluzie

Cheile API, atunci când sunt construite corect, sunt încă o modalitate excelentă de a comunica cu un alt server. După cum am analizat în acest articol, urmărirea anumitor practici oferă avantaje atât consumatorilor API cât și furnizorilor API. Sper că acest lucru vă va ajuta.

Fericit să vă protejați API-urile!