Teknik og integration

Hvad er API-nøgle?

En API-nøgle identificerer det kaldende system, ikke en person. Den udløber ikke af sig selv og virker, indtil ejeren tilbagekalder den.

Kaldes også: API key, API-token

En API-nøgle er en streng, du sender med i hvert kald, så modtageren kan se, hvem der kalder. Google formulerer forskellen kort: API keys identify the calling project, authentication tokens identify a user. Nøglen fortæller altså, hvilket system der ringer på. Den fortæller intet om, hvilket menneske der sidder bag.

Hvad en nøgle ikke kan

API-nøgler kan ikke identificere individuelle brugere, og de betragtes generelt ikke som sikre, fordi de typisk er tilgængelige for klienten. Ligger nøglen i JavaScript i browseren eller i en mobilapp, kan den findes. Så er den ikke længere en hemmelighed, men et offentligt tal.

Det værste ved en stjålet nøgle er ikke tyveriet. Det er varigheden. En API-nøgle har ingen udløbstid. Den virker, indtil ejeren opdager problemet og tilbagekalder den. Sker det ikke, virker den om et år.

Derfor er der to ting, der betaler sig, længe før noget går galt. Hold nøglen på serveren og læg den i en miljøvariabel i stedet for i kildekoden, så den ikke følger med, når koden bliver delt. Og sørg for, at der findes mere end én nøgle, så en udskiftning kan ske uden nedetid.

Client credentials i stedet

RFC 6749 § 4.4 beskriver alternativet. Klienten autentificerer sig med client_id og client_secret hos authorization serveren og får et kortlivet access token tilbage. Det er tokenet, der bliver sendt med de efterfølgende kald.

Forskellen i praksis:

  • API-nøgle. Én langlivet, statisk hemmelighed, som sendes med hvert eneste kald og dermed eksponeres hele tiden.
  • Client credentials. Den langlivede hemmelighed veksles til et kortlivet token. Det er tokenet, der bliver eksponeret, der følger scopes med, og det udløber af sig selv.

Læs mere om rammen i OAuth 2.0.

Nøglen er ikke et bevis på en person

Det er her, det går galt i integrationer omkring identitet. En korrekt API-nøgle betyder, at kaldet kommer fra et system, der kender nøglen. Den betyder ikke, at brugeren er den, systemet påstår.

Har du et endpoint, der siger "denne kunde er over 18", og det eneste, der beskytter det, er en API-nøgle, så flytter du hele tilliden over på den ene streng. Ved aldersverifikation og KYC skal svaret kunne føres tilbage til et faktisk tjek af personen, ikke til en hemmelighed i en konfigurationsfil. Nøglen afgør, hvem der må spørge. Den afgør ikke, hvad svaret er.

Teksten er sidst tjekket .

Nøglen hører hjemme på serveren

I vores plugins til WooCommerce, WordPress og PrestaShop ligger nøglen i butikkens backend og bliver aldrig sendt til browseren. Bruger I vores API direkte, kan I få udstedt separate nøgler til test og drift, så en nøgle kan skiftes ud uden at stoppe det hele.