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 sig med dem og bygge hurtigere løsninger.

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

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

I denne artikel skal vi se på, hvordan man korrekt administrerer API-nøgler 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 ophæves. 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 den på den rigtige måde.

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

API-nøglegenerering

Da selve API-nøglen er en identitet, til at identificere applikationen eller brugeren, skal den være unik, tilfældig og ikke-gætterbar. 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øglelagring

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. Årsagen 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 et kodeord).

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 ren tekst (dårlig) eller kryptere den, bør vi gemme den som en hashværdi i vores database.

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

I koden ovenfor er den primære nøgle en kombination af præfikset og hash'en for API-nøglen {præfiks}. {Hash_of_whole_api_key}.

Men vent, der er mere. Opbevaring af en hashværdi bringer specifikke brugervenlighedsproblemer. Lad os adressere dem nu.

Præsentation af API-nøglen for brugere

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

Visning af genereret API-nøgle med en alarmmeddelelse

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

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, som denne:

API-nøglestyringskonsol

Giv ikke API-nøglen al magt

En almindelig fejl, som API-nøgleudbydere begår, er at give en nøgle til at få adgang til alt, da det er let at administrere. Gør det ikke. Antag, at en bruger bare skal læse en e-mail og generere en API-nøgle. Men denne 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 adgangen til API-nøglen og vælge specifikke handlinger, som en API-nøgle kan udføre. Dette kan gøres ved at tilvejebringe scopes, hvor hvert omfang repræsenterer en bestemt tilladelse.

For eksempel,

  • Hvis du har brug for en API-nøgle for 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 en separat API-nøgle genereres med et specifikt omfang.

Så mens du opretter API-nøglen, skal du give brugerne mulighed for at vælge, hvilken adgang den API-nøgle skal have, som på billedet herunder.

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

API-nøgledatabase-enhed

Bedøm begrænsende API-nøgler

Ja, du ved muligvis allerede det, men det er vigtigt at bedømme grænseanmodninger fremsat med specifikke API-nøgler for at sikre, at ingen dårlig aktør kan fjerne dine API-servere eller forårsage ydelsesproblemer, der påvirker dine andre kunder. At have en ordentlig takstbegrænsende og overvågningsløsning 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, er det en fordel for både API-forbrugere og API-udbydere at følge visse fremgangsmåder. Håber, at dette hjælper dig.

Glad at sikre dine API'er!