Nederlands
  • hasura
  • restful api
  • graphql
  • logto
  • custom jwt
  • toegangscontrole
  • autorisatie

Logto x Hasura: Gebruik JWT voor toegangscontrole

Deze uitgebreide gids schetst de stappen die betrokken zijn bij het integreren van Logto met Hasura's JWT-modus toegangscontrole, waardoor de databeveiliging effectief wordt versterkt.

Darcy Ye
Darcy Ye
Developer

Hasura is een tool die snel bijpassende GraphQL- en REST-API's kan bieden voor jouw data. Met het oog op databeveiliging biedt Hasura ook de mogelijkheid om de toegangscontrole voor elke verschillende API fijn af te stemmen.

Gewoonlijk maken Hasura-gebruikers gebruik van andere identiteitsbeheer- en authenticatiediensten, waarbij Logto een zeer populaire keuze is.

In deze blogpost gaan we ervan uit dat je al gebruikmaakt van Hasura-diensten. We laten zien hoe je Hasura en Logto kunt integreren om de beveiliging van je gegevens te maximaliseren. Als je nog geen Logto-account hebt, meld je dan nu aan en begin het te gebruiken!

Achtergrond

Hasura maakt gebruik van rolgebaseerd toegangsbeheer, terwijl Logto gebruikmaakt van de standaard rolgebaseerde toegangscontrole (RBAC).

In Logto's model en beste praktijken voor RBAC adviseren we gebruikers om scope te gebruiken om overeen te komen met de fijnste granulariteit van permissies, role te gebruiken als een verzameling van scopes voor gemakkelijke batchbewerkingen, en uiteindelijk scope (meestal aan de kant van de resourceverschaffers) te controleren om te verifiëren of een gebruiker een specifieke bewerking mag uitvoeren.

In Hasura komt een role overeen met de fijnste granulariteit van permissies en worden permissiecontroles uitgevoerd tegen roles. Daarom raden we tijdens de configuratie van Logto aan om één role in kaart te brengen naar precies één scope. Deze benadering kan de permissies van Logto en Hasura aan elkaar koppelen om verwarring en misbruik te voorkomen.

Hasura kan toegangscontrole ondersteunen met behulp van Webhooks of JWT. Onze vorige blogpost introduceerde hoe je Webhooks kunt gebruiken, en in de volgende secties leggen we uit hoe je Hasura's JWT-modus toegangscontrole kunt gebruiken.

Aan de slag

Laten we beginnen met een eenvoudig voorbeeld. Stel dat een gebruiker al twee API's in Hasura heeft, GET /user en PATCH /user, die overeenkomen met twee rollen: user:reader en user:maintainer.

1. Maak Hasura API-bron aan in Logto

Maak een Hasura API-bron aan in Logto.

Hasura API

2. Maak rollen aan volgens de Hasura-instelling in Logto

We moeten twee scopes maken voor de in stap 1 genoemde Hasura API-bron, namelijk read:user en maintain:user, en vervolgens twee rollen creëren: user:reader (bevat de read:user scope) en user:maintainer (inclusief de maintain:user scope) om één-op-één overeen te komen met de rollen van Hasura. Wijs deze rollen toe aan Logto-gebruikers zoals nodig.

Hasura API met scopes

Gebruiker lezer rol

Gebruiker onderhoudsrol

3. Configureer Hasura omgevingsvariabele HASURA_GRAPHQL_JWT_SECRET om JWT-modus in te schakelen

Door te kijken naar Hasura JWT-configuratieopties, moeten we de omgevingsvariabele HASURA_GRAPHQL_JWT_SECRET toevoegen en configureren voordat we JWT voor toegangscontrole kunnen gebruiken.

Er zijn veel verschillende opties die kunnen worden geconfigureerd, maar hier introduceren we het eenvoudigste geval: alleen de jwk_url hoeft te worden geconfigureerd. Deze waarde kan worden verkregen van jouw Logto's OpenID-configuratie-eindpunt (https://your.logto.domain/oidc/.well-known/openid-configuration).

Hasura JWT-config

4. Pas extra claims van gebruikerstoegangstoken aan

Gebruikmakend van Logto's Custom JWT-functie, pas de logica aan om extra claims toe te voegen aan het JWT-formaat gebruikerstoegangstoken.

Gebruikerstoegangstoken script

Pas de methode getCustomJwtClaims aan om gegevens toe te voegen aan het JWT dat Hasura gebruikt voor het implementeren van toegangscontrole. Dit kan gegevens bevatten met betrekking tot de gebruiker die op dat moment wordt geautoriseerd, inclusief roles die ze bezitten, waartoe toegang kan worden verkregen via context.

We hebben ook een omgevingsvariabele USER_DEFAULT_ROLE_NAMES gedefinieerd om hardcodering te vermijden.

5. Integreer Logto SDK

Na het configureren van Logto en Hasura, integreer je je app met de Logto SDK. Hier gebruiken we een Next-voorbeeld om het gebruikerstoegangstoken uitgegeven door Logto te bekijken na gebruikersaanmelding.

Gebruiker met rollen

Eerst wijzen we de eerder gemaakte user:reader en user:maintainer rollen toe aan de gebruiker, en loggen dan in als die gebruiker.

Verkrijg het gebruikerstoegangstoken en verzoek Hasura API's:

Conclusie

In dit artikel bieden we een andere methode van op JWT gebaseerde toegangscontrole ondersteund door Hasura, naast Webhook.

Door de processen van Hasura's Webhook en JWT toegangscontrole te vergelijken, kunnen we zien dat de Webhook-aanpak een Webhook naar Logto stuurt en wacht op een reactie met elk Hasura-verzoek; terwijl de op JWT gebaseerde aanpak continu kan worden gebruikt totdat de JWT verloopt.

De JWT-aanpak kan de netwerkbelasting verminderen en de netwerklatentie die door Webhooks wordt veroorzaakt elimineren; terwijl de Webhook-aanpak wijzigingen in gebruikersrechten in realtime kan synchroniseren.

Gebruikers kunnen de geschikte aanpak kiezen op basis van deze conclusies, gecombineerd met hun daadwerkelijke zakelijke behoeften.