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.
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 scope
s 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 role
s. 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.
2. Skapa roller enligt Hasura-inställning i Logto
Vi behöver skapa två scope
s 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.
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).
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.
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 role
s 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.
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.