Nederlands
  • logto
  • api
  • bescherming
  • JWT
  • autorisatie

API-autorisatiemethoden

In dit artikel verkennen we drie veelvoorkomende API-autorisatiemechanismen: API-sleutels, basisverificatie, en OAuth JWT-tokens. Aan het eind bespreken we hoe Logto je kan helpen je API's te beschermen met behulp van OAuth JWT-tokens.

Simeng
Simeng
Developer

Inleiding

In de wereld van vandaag zijn API's de ruggengraat van moderne applicaties. Ze zijn de primaire manier om toegang te krijgen tot gegevens en functionaliteit van backend-services. API's stellen verschillende softwaresystemen van verschillende partijen in staat om met elkaar te communiceren en gegevens uit te wisselen, waardoor ze onmisbaar zijn voor bedrijven. API's zijn echter ook een gemeenschappelijk doelwit voor aanvallers. De noodzaak voor API-bescherming is sterker dan ooit tevoren.

API-bescherming is het proces van het beveiligen van API's tegen ongeautoriseerde toegang, misbruik en aanvallen. Het is een cruciaal onderdeel van elke API-strategie. In dit artikel verkennen we drie veelvoorkomende API-beschermingsmechanismen: API-sleutels, basisverificatie, en OAuth JWT-tokens. Aan het eind tonen we ook hoe Logto je API's beschermt met behulp van OAuth JWT-tokens.

API-sleutels

Een API-sleutel is de meest eenvoudige en veelgebruikte methode om API's te beveiligen. Een API-sleutel is een lange reeks tekens die door de API-provider wordt gegenereerd en gedeeld met geautoriseerde gebruikers. Deze sleutel moet in de request-header worden opgenomen bij toegang tot de API. API-sleutels zijn eenvoudig en effectief voor basale beveiligingsbehoeften. Populaire diensten zoals Google Maps API en AWS bieden bijvoorbeeld API-sleutels om toegang te controleren en gebruik te monitoren. Ze hebben echter beperkingen op het gebied van beveiliging. Ze worden vaak gebruikt voor machine-tot-machine communicatie.

e.g.

Voordelen:

  • Eenvoudig te implementeren: API-sleutels zijn gemakkelijk te implementeren en te gebruiken. Ze vereisen het bijvoegen van een sleutel aan de request-header, waardoor het een eenvoudige methode is voor ontwikkelaars en klanten om te begrijpen en te gebruiken.
  • Makkelijk te monitoren: API-sleutels zijn eenvoudig te monitoren. Je kunt het gebruik van elke sleutel bijhouden en ze indien nodig intrekken.
  • Effectieve snelheidsbeperking: API-sleutels zijn effectief voor snelheidsbeperking. Je kunt een limiet instellen op het aantal requests per sleutel om misbruik te voorkomen.
  • Geschikt voor niet-gevoelige gegevens: API-sleutels zijn geschikt voor niet-gevoelige gegevens of openbaar beschikbare API's, waar de beveiligingseisen lager zijn.

Nadelen:

  • Beperkte beveiliging: API-sleutels zijn niet voldoende beveiligd voor gevoelige gegevens, vooral bij client-side applicaties. Ze worden vaak gebruikt in machine-tot-machine communicatie.
  • Niet geschikt voor gebruikersauthenticatie: API-sleutels zijn gekoppeld aan applicaties of systemen, niet aan individuele gebruikers, waardoor het moeilijk is specifieke gebruikers te identificeren of hun acties bij te houden.
  • Geen tokenverval: API-sleutels zijn meestal statisch en verlopen niet. Als een sleutel wordt gecompromitteerd, kan deze oneindig worden misbruikt, tenzij handmatig vernieuwd.

Basisverificatie

Basisverificatie is een andere veelgebruikte methode om API's te beveiligen. Het is een eenvoudig verificatieschema ingebouwd in het HTTPs-protocol. Het houdt in dat een gebruikersnaam en wachtwoord in de request-header worden verzonden. De server verifieert vervolgens de inloggegevens en retourneert de gevraagde bron als deze geldig zijn. Veel webapplicaties en RESTful API's gebruiken bijvoorbeeld basisverificatie als een snelle en gemakkelijke manier om gebruikers te authenticeren. Basisverificatie is veiliger dan API-sleutels omdat het een gebruikersnaam en wachtwoord gebruikt in plaats van een statische sleutel. Het is echter nog steeds niet veilig genoeg voor gevoelige gegevens. Omdat de inloggegevens in platte tekst worden verzonden, zijn ze vatbaar voor interceptie. Basisverificatie is geschikt voor interne systemen waar de netwerkverbinding veilig is, bijvoorbeeld machine-tot-machine.

e.g.

or

Voordelen:

  • Sterkere beveiliging: Basisverificatie is veiliger dan API-sleutels omdat het een gebruikersnaam en wachtwoord gebruikt in plaats van een statische sleutel.
  • Breed ondersteund: Basisverificatie wordt breed geaccepteerd en ondersteund door de meeste webservers en browsers.
  • Eenvoud: Net als API-sleutels is basisverificatie relatief eenvoudig op te zetten en te gebruiken.

Nadelen:

  • Blootstelling van inloggegevens: Basisverificatie verzendt inloggegevens in platte tekst, waardoor ze vatbaar zijn voor interceptie als ze niet worden gebruikt over een veilige verbinding (HTTPS).
  • Geen tokenverval: Basisverificatie ondersteunt geen tokenverval. Als een token wordt gecompromitteerd, kan het oneindig worden misbruikt, tenzij handmatig vernieuwd.

OAuth JWT-tokens

JSON Web Token (JWT), gedefinieerd door RFC 7519, is een open standaard voor het veilig overbrengen van informatie tussen partijen als een JSON-object. Het wordt veel gebruikt voor authenticatie en autorisatie in webapplicaties en API's.

Een getekende JWT heeft het volgende formaat:

Het bestaat uit drie delen gescheiden door .: de header, payload en handtekening.

Hier is een voorbeeld van een JWT:

  • header: bevat informatie over het type token en het hashing-algoritme dat wordt gebruikt om het te ondertekenen.
  • payload: bevat de claims (verklaringen) over de gebruiker en andere gegevens.
  • signature: is een hash van de header en payload, ondertekend met een geheime sleutel.

OAuth is een uitgebreide open standaard voor het beveiligen van API's en voor toegangstoewijzing, vaak gebruikt als een manier voor klanten om websites of applicaties toegang te geven tot hun informatie op andere websites zonder hen de wachtwoorden te geven.

Wanneer gebruikt samen met JWT, bieden OAuth JWT-tokens een robuuste beveiligingsoplossing. In plaats van gevoelige informatie zoals gebruikersnamen en wachtwoorden bij elk verzoek over te dragen, worden OAuth JWT-tokens uitgegeven aan geautoriseerde klanten na succesvolle authenticatie. Deze tokens bevatten informatie over de gebruiker en hun permissies. Bovendien zijn JWT-tokens digitaal ondertekend voor bescherming tegen knoeien en kunnen ze verlopen. Dat biedt een extra beveiligingslaag.

Een van de belangrijkste voordelen van OAuth JWT-tokens is hun flexibiliteit. Ze kunnen worden gebruikt voor verschillende soorten applicaties, inclusief web- en mobiele apps, single sign-on-oplossingen en meer. Grote sociale mediaplatforms zoals Facebook, Twitter en LinkedIn gebruiken bijvoorbeeld OAuth JWT-tokens om gebruikers te authenticeren en derde-partij applicaties veilig toegang te geven tot gebruikersgegevens.

Voordelen:

  • Verbeterde beveiliging: OAuth JWT-tokens bieden een hoger beveiligingsniveau. Ze zijn digitaal ondertekend en kunnen worden versleuteld, waardoor het risico op ongeautoriseerde toegang en datamanipulatie wordt verminderd.
  • Gebruikersidentiteit en toegangscontrole: JWT-tokens kunnen gebruikersidentiteitsinformatie bevatten en claims opnemen die specificeren welke acties of bronnen een gebruiker mag openen.
  • Fijngranige toegangscontrole: JWT-tokens kunnen worden gebruikt om fijngranige toegangscontrole te implementeren. Je kunt bijvoorbeeld specificeren welke bronnen een gebruiker mag openen en welke acties ze op die bronnen kunnen uitvoeren.
  • Tokenverval: OAuth JWT-tokens kunnen ingesteld worden om na een bepaalde periode te verlopen, wat het risico op misbruik vermindert.

Nadelen:

  • Complexiteit: OAuth JWT-tokens zijn complexer dan API-sleutels en basisverificatie. Ze vereisen extra stappen om op te zetten en te gebruiken.
  • Tokenbeheer: OAuth JWT-tokens moeten beheerd en indien nodig ingetrokken worden. Dit kan een uitdaging zijn voor grootschalige applicaties met veel gebruikers en klanten.
  • Hulpbronnenverbruik: Het genereren en valideren van tokens kan enige prestatiebelasting veroorzaken, wat een probleem kan zijn in scenario's met veel verkeer.

Logto API-bescherming

De keuze van de authenticatiemethode hangt af van de specifieke vereisten en beveiligingsoverwegingen van je applicatie. API-sleutels zijn eenvoudig maar minder veilig, basisverificatie biedt meer beveiliging maar mist gebruikersidentiteitsfuncties, terwijl OAuth JWT-tokens robuuste beveiliging en gebruikersidentiteitsmogelijkheden bieden, maar de complexiteit in implementatie en beheer verhogen.

Logto biedt een eenvoudige en veilige manier om je API te beschermen met behulp van OAuth JWT-tokens. Het ondersteunt zowel OAuth 2.0 als OpenID Connect (OIDC) standaarden, zodat je de authenticatiemethode kunt kiezen die het beste bij je behoeften past. Je kunt de client_credentials-stroom gebruiken voor machine-tot-machine communicatie en de authorization_code-stroom voor webapplicaties.

Machine-tot-machine communicatie

Logto gebruikt de client_credentials-stroom voor machine-tot-machine type applicaties. Deze stroom is geschikt voor communicatie tussen backend-servers, waarbij de client een vertrouwelijke client is die de clientgegevens veilig kan opslaan. Het wordt ook wel de "twee-potige OAuth" genoemd omdat het geen gebruiker betreft. De clientgegevens worden direct als autorisatie-gunning gebruikt om een toegangstoken te verkrijgen.

Het integratieproces is eenvoudig en direct:

  1. Maak een API-bron in Logto Console.
  2. Maak een machine-tot-machine client in Logto Console.
  3. Stuur een verzoek naar het Logto token-eindpunt om een toegangstoken te verkrijgen.
  1. Toegang tot de beschermde bron met het toegangstoken.

Raadpleeg onze documentatie voor machine-tot-machine integratie voor meer details.

Webapplicaties

Voor publieke clients zoals webapplicaties gebruikt Logto de authorization_code-stroom om gebruikers te authenticeren. Deze stroom is geschikt voor webapplicaties waarbij de client een publieke client is die de clientgegevens niet veilig kan opslaan. Het is ook bekend als de "drie-potige OAuth" omdat het een gebruiker betreft. De gebruiker wordt doorgestuurd naar de autorisatieserver om de client te authenticeren en autoriseren. De client gebruikt vervolgens de autorisatiecode om een toegangstoken te verkrijgen.

Het integratieproces is iets ingewikkelder dan de machine-tot-machine stroom:

Bekijk ons Artikel over hoe je je Express.js API beschermt met JWT en Logto als een uitgebreid voorbeeld van hoe je Logto kunt integreren met React en toegang krijgt tot je Express-server API's met behulp van JWT-tokens.