Bescherm je Express.js API met JWT en Logto
Leer hoe je je Express.js API-eindpunten kunt beschermen met JSON Web Tokens (JWT) en Logto.
Leer hoe je je Express.js API-eindpunten kunt beschermen met JSON Web Tokens (JWT) en Logto.
Wanneer je een webapplicatie ontwikkelt, is het cruciaal om je API-eindpunten te beschermen tegen ongeautoriseerde toegang. Stel je voor dat je een online winkelwebsite bouwt; je wilt zeker niet dat cyberdieven je API exploiteren.
Stel dat je al een Express.js-applicatie hebt gebouwd met gebruikersauthenticatie, waarbij gebruikers moeten inloggen voordat ze bepaalde acties kunnen ondernemen. Zo niet, dan kun je je avontuur starten met Logto. Het vereist slechts een paar regels code om een gebruikersauthenticatiestroom op te zetten.
Echter, zelfs na gebruikersauthenticatie, sta je voor verschillende keuzes om je API-eindpunten te beschermen. Helaas hebben de meeste van deze opties hun nadelen:
In deze handleiding demonstreren we hoe je je API-eindpunten kunt versterken met behulp van JSON Web Tokens (JWT) en Logto. Deze aanpak biedt schaalbaarheid en minimale extra kosten.
Voordat we beginnen, zorg ervoor dat je het volgende hebt:
Logto maakt volledig gebruik van RFC 8707: Resource Indicators for OAuth 2.0 om je API-eindpunten te beveiligen. Dit betekent dat je je API-resources kunt definiëren met hun daadwerkelijke URL's.
Navigeer naar het tabblad "API-resources" in de Logto Console en klik op "Create API resource" om een nieuwe te maken. Als je bijvoorbeeld het /api/products-eindpunt wilt beschermen, kun je de URL https://yourdomain.com/api/products als de identifier gebruiken.

Om verder te gaan, moet je de Logto SDK in je client-applicatie integreren. Deze applicatie kan verschillen van je Express.js backend; bijvoorbeeld, je hebt mogelijk een React-app die Express.js als de backend API-server gebruikt.
Je moet ook de Logto SDK-configuratie aanpassen om Logto te informeren dat je een toegangstoken voor je API in deze grant wilt aanvragen. Hier is een voorbeeld met React:
Zodra een gebruiker zich aanmeldt bij Logto, wordt isAuthenticated binnen de Logto SDK true:
Nu kun je de methode getAccessToken gebruiken om een toegangstoken voor je API te verkrijgen:
Voeg ten slotte dit toegangstoken toe in de Authorization-header bij het maken van verzoeken aan je API:
In je Express.js applicatie installeer je de jose-bibliotheek voor JWT-verificatie:
Aangezien we Bearer-authenticatie gebruiken, haal je het toegangstoken uit de Authorization-header:
Vervolgens maak je een middleware om het toegangstoken te verifiëren:
Je kunt nu deze middleware gebruiken om je API-eindpunten te beschermen:
Met deze aanpak hoef je niet elke keer dat er een verzoek binnenkomt contact op te nemen met de Logto-server. In plaats daarvan haal je de JSON Web Key Set (JWKS) eenmalig van de Logto-server op en verifieer je vervolgens lokaal toegangstokens.
Tot nu toe hebben we alleen geverifieerd dat een gebruiker is ingelogd met Logto. We weten nog steeds niet of de gebruiker over de juiste toestemming beschikt om toegang te krijgen tot het API-eindpunt. Dit komt omdat Logto iedereen toestaat om een toegangstoken voor een bestaande API-resource te verkrijgen.
Om dit aan te pakken, kunnen we role-based toegangscontrole (RBAC) toepassen. In Logto kun je rollen definiëren en hieraan permissies toekennen. Raadpleeg deze handleiding om te leren hoe je rollen en permissies in Logto kunt definiëren.
Na het definiëren van rollen en permissies, kun je de scopes-optie toevoegen aan de LogtoProvider-component:
Logto zal dan alleen een toegangstoken met de juiste scope(s) aan de gebruiker toekennen. Bijvoorbeeld, als een gebruiker alleen de scope read:products heeft, zal het toegangstoken alleen die scope bevatten:
Als een gebruiker zowel de read:products als write:products scopes heeft, zal het toegangstoken beide scopes bevatten met een spatie als scheidingsteken:
In je Express.js-applicatie kun je verifiëren of het toegangstoken de juiste scope(s) bevat voordat je toegang verleent tot het API-eindpunt:
Het beschermen van API-eindpunten terwijl je zorgt voor schaalbaarheid is geen gemakkelijke taak. Bij Logto streven we ernaar om aanvraagauthenticatie voor ontwikkelaars te vereenvoudigen, zodat je meer kunt focussen op je bedrijfslogica.
Voor vragen kun je gerust onze Discord-server joinen. Onze community helpt je graag verder.