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.
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 scope
s 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 role
s. 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.
2. Maak rollen aan volgens de Hasura-instelling in Logto
We moeten twee scope
s 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.
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).
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.
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 role
s 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.
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.