Bedste fremgangsmåder til opbygning af sikre API-nøgler

Vi ved alle, hvor værdifulde API'er er. De er porten til at udforske andre tjenester, integrere med dem og oprette hurtige løsninger hurtigere.

Du har måske bygget eller overvejer at opbygge API'er, som andre udviklere kan bruge. En API har brug for en eller anden form for godkendelse for at give autoriseret adgang til de data, den returnerer.

Der er adskillige godkendelsesstandarder tilgængelige i dag såsom API-nøgler, OAuth, JWT osv.

I denne artikel vil vi se på, hvordan man administrerer API-nøgler korrekt for at få adgang til API'er.

Så hvorfor API-nøgler?

API-nøgler er enkle at bruge, de er korte, statiske og udløber ikke, medmindre de tilbagekaldes. De giver en nem måde for flere tjenester at kommunikere på.

Hvis du leverer en API, som dine kunder kan forbruge, er det vigtigt, at du bygger det på den rigtige måde.

Lad os komme i gang, og jeg viser dig, hvordan du bygger API-nøgler på den rigtige måde.

API-nøglegenerering

Da selve API-nøglen er en identitet, som applikationen eller brugeren skal identificeres til, skal den være unik, tilfældig og ikke-gættelig. API-nøgler, der genereres, skal også bruge alfanumeriske og specialtegn. Et eksempel på en sådan API-nøgle er zaCELgL.0imfnc8mVLWwsAawjYr4Rx-Af50DDqtlx.

Sikker API-nøgleopbevaring

Da API-nøglen giver direkte adgang til data, ligner det stort set en adgangskode, som en bruger af en web- eller mobilapp giver for at få adgang til de samme data.

Tænk over det. Grunden til, at vi har brug for at gemme API-nøgler, er at sikre, at API-nøglen i anmodningen er gyldig og udstedt af os (ligesom en adgangskode).

Vi behøver ikke at kende den rå API-nøgle, men skal bare validere, at nøglen er korrekt. Så i stedet for at gemme nøglen i almindelig tekst (dårlig) eller kryptere den, skal vi gemme den som en hashværdi i vores database.

En hashværdi betyder, at selvom nogen får uautoriseret adgang til vores database, lækkes ingen API-nøgler, og det hele er sikkert. Slutbrugeren sender den rå API-nøgle i hver API-anmodning, og vi kan validere den ved at hashe API-nøglen i anmodningen og sammenligne hash-nøglen med hash, der er gemt i vores database. Her er en grov implementering af det i Java:

I koden ovenfor vil den primære nøgle være en kombination af præfikset og hash af API-nøglen {prefix}.{hash_of_whole_api_key}.

Men vent, der er mere. Lagring af en hashværdi medfører specifikke brugbarhedsproblemer. Lad os adressere dem nu.

Præsentation af API-nøglen til brugerne

Da vi ikke gemmer den originale API-nøgle, kan vi kun vise den en gang til brugeren på tidspunktet for oprettelsen. Så sørg for at advare brugere om, at det ikke kan hentes igen, og de skal generere et nyt token, hvis de glemmer at kopiere API-nøglen og gemme den sikkert. Du kan gøre noget som dette:

Hvordan brugere kan identificere en genereret API-nøgle senere

Et andet problem er, hvordan brugere identificerer den rigtige API-nøgle i din konsol, hvis de har brug for at redigere eller tilbagekalde den. Dette kan løses ved at tilføje et præfiks til API-nøglen. Bemærk på billedet over de første 7 tegn (det er vores præfiks), adskilt af prikken.

Nu kan du gemme dette præfiks i databasen og vise det i konsollen, så brugerne hurtigt kan identificere den rigtige API-nøgleindgang:

Giv ikke API-nøglen al den magt

En almindelig fejl, som API-nøgleudbydere laver, er at give en nøgle til at få adgang til alt , da det er let at administrere. Gør ikke det. Antag at en bruger bare skal læse en e-mail og generere en API-nøgle. Men den nøgle har nu fuld adgang til andre tjenester, herunder sletning af poster i databasen.

Den rigtige tilgang er at give slutbrugerne mulighed for korrekt at begrænse API-nøgleadgang og vælge specifikke handlinger, som en API-nøgle kan udføre. Dette kan gøres ved at give rækkevidde , hvor hvert omfang repræsenterer en specifik tilladelse.

For eksempel,

  • hvis du har brug for en API-nøgle til bare at sende e-mails, kan du generere en API-nøgle med omfanget som "email.send"
  • hvis slutbrugeren har flere servere, og hver udfører en bestemt handling, kan der genereres en separat API-nøgle med et specifikt omfang.

Så når du opretter API-nøglen, skal du tillade brugere at vælge, hvilken adgang den API-nøgle skal have, som på billedet nedenfor.

På denne måde kan brugere generere flere API-nøgler, hver med specifikke adgangsregler for bedre sikkerhed. Og når der modtages en API-anmodning, kan du kontrollere, om API-nøglen har det rigtige omfang til at få adgang til den API. Nu ser databasen sådan ud:

Hastighedsbegrænsende API-nøgler

Ja, du ved muligvis allerede det, men det er vigtigt at bedømme begrænsningsanmodninger med specifikke API-nøgler for at sikre, at ingen dårlige aktører kan fjerne dine API-servere eller forårsage ydeevneproblemer, der påvirker dine andre kunder. At have en ordentlig løsning til hastighedsbegrænsning og overvågning holder API-tjenesten sund.

Konklusion

API-nøgler er, når de er bygget rigtigt, stadig en god måde at kommunikere med en anden server på. Som vi gennemgik i denne artikel, følger visse fremgangsmåder fordele for både API-forbrugere og API-udbydere. Håber dette hjælper dig.

Glad med at sikre dine API'er!