• hasura
  • restful api
  • graphql
  • logto
  • custom jwt
  • access control
  • authorization

Logto x Hasura: Använd JWT för åtkomstkontroll

Denna omfattande guide beskriver stegen för att integrera Logto med Hasuras JWT-lägesåtkomstkontroll, vilket effektivt förstärker datasäkerheten.

Darcy Ye
Darcy Ye
Developer

Hasura är ett verktyg som snabbt kan tillhandahålla motsvarande GraphQL- och REST-API:er som passar dina data. Med tanke på datasäkerhet erbjuder Hasura också möjligheten att finjustera åtkomstkontrollen för varje olika API.

Vanligtvis använder Hasura-användare andra identitetshanterings- och autentiseringstjänster, där Logto är en mycket populär bland dem.

I det här blogginlägget antar vi att du redan använder Hasuras tjänster. Vi kommer att introducera hur du integrerar Hasura och Logto för att maximera säkerheten för dina data. Om du inte har ett Logto-konto, registrera dig och börja använda det nu!

Bakgrund

Hasura använder rollbaserad åtkomsthantering, medan Logto använder den standardiserade rollbaserade åtkomstkontrollen (RBAC).

I Logtos modell och bästa praxis för RBAC, råder vi användare att använda scope för att motsvara den finaste granulariteten av behörigheter, använda role som en samling av scopes för bekväma batch-operationer, och slutligen kontrollera scope (vanligtvis på resursleverantörernas sida) för att verifiera om en användare kan utföra en specifik operation.

I Hasura motsvarar en role den finaste granulariteten av behörigheter, och behörighetskontroller utförs mot roles. Därför rekommenderar vi, under konfigurationen av Logto, att mappa en role till exakt en scope. Detta tillvägagångssätt kan länka Logtos och Hasuras behörigheter tillsammans för att undvika förvirring och felanvändning.

Hasura kan stödja åtkomstkontroll med hjälp av Webhooks eller JWT. Vårt tidigare blogginlägg introducerade hur man använder Webhooks, och i de följande avsnitten kommer vi att förklara hur man använder Hasuras JWT-lägesåtkomstkontroll.

Kom igång

Låt oss börja med ett enkelt exempel. Anta att en användare redan har två API:er i Hasura, GET /user och PATCH /user, som motsvarar två roller: user:reader och user:maintainer, respektive.

1. Skapa Hasura API-resurs i Logto

Skapa en Hasura API-resurs i Logto.

Hasura API

2. Skapa roller enligt Hasura-inställning i Logto

Vi behöver skapa två scopes för den Hasura API-resurs som nämnts i steg 1, nämligen read:user och maintain:user, och sedan skapa två roller: user:reader (innehåller read:user-området) och user:maintainer (inkluderar maintain:user-området) för att motsvara Hasuras roller en-till-en. Och tilldela dessa roller till Logto-användare efter behov.

Hasura API med scopes

User reader role

User maintainer role

3. Konfigurera Hasura miljövariabel HASURA_GRAPHQL_JWT_SECRET för att aktivera JWT-läge

Genom att titta på Hasura JWT-konfigurationsalternativ, behöver vi lägga till och konfigurera miljövariabeln HASURA_GRAPHQL_JWT_SECRET innan vi kan använda JWT för åtkomstkontroll.

Det finns många olika alternativ som kan konfigureras, men här introducerar vi det enklaste fallet: endast jwk_url behöver konfigureras. Detta värde kan erhållas från Logtos OpenID-konfigurationsslutpunkt (https://your.logto.domain/oidc/.well-known/openid-configuration).

Hasura JWT-konfig

4. Anpassa extra krav för användaråtkomsttoken

Använd Logtos funktion Custom JWT för att anpassa logiken för att lägga till extra krav till användaråtkomsttoken i JWT-format.

Användar åtkomsttoken skript

Anpassa metoden getCustomJwtClaims för att lägga till data i JWT som Hasura förlitar sig på för att implementera åtkomstkontroll. Detta kan inkludera data relaterade till användaren som auktoriseras under det tillfället, inklusive roles de innehar, som kan nås genom context.

Vi har även definierat en miljövariabel USER_DEFAULT_ROLE_NAMES för att undvika hårdkodning.

5. Integrera Logto SDK

Efter att ha konfigurerat Logto och Hasura, integrera din app med Logto SDK. Här använder vi ett Next-exempel för att förhandsgranska användaråtkomsttoken som utfärdats av Logto efter användarinloggning.

Användare med roller

Först tilldelar vi de tidigare skapade user:reader och user:maintainer rollerna till användaren och loggar sedan in som den användaren.

Få användaråtkomsttoken och begär Hasura API:er:

Slutsats

I den här artikeln ger vi en annan metod för JWT-baserad åtkomstkontroll som stöds av Hasura, utöver Webhook.

Genom att jämföra processerna för Hasuras Webhook och JWT åtkomstkontroll, kan vi se att webhook-tillvägagångssättet skickar en webhook till Logto och väntar på ett svar med varje Hasura-begäran; medan det JWT-baserade tillvägagångssättet kontinuerligt kan användas tills JWT går ut.

JWT-tillvägagångssättet kan minska nätverksbelastningen och eliminera nätverkslatens som webbhooks medför; samtidigt kan webhook-tillvägagångssättet synkronisera ändringar i användarbehörigheter i realtid.

Användare kan välja lämpligt tillvägagångssätt baserat på dessa slutsatser, kombinerat med deras faktiska affärsbehov.