Italiano
  • hasura
  • restful api
  • graphql
  • logto
  • custom jwt
  • controllo degli accessi
  • autorizzazione

Logto x Hasura: Utilizzare JWT per il controllo degli accessi

Questa guida completa descrive i passaggi per integrare Logto con il controllo degli accessi in modalità JWT di Hasura, rafforzando efficacemente la sicurezza dei dati.

Darcy Ye
Darcy Ye
Developer

Hasura è uno strumento che può fornire rapidamente le corrispondenti API GraphQL e REST adatte ai tuoi dati. Considerando la sicurezza dei dati, Hasura offre anche la possibilità di affinare il controllo degli accessi per ciascuna API.

Di solito, gli utenti Hasura utilizzano altri servizi di gestione delle identità e autenticazione, tra cui Logto è uno dei più popolari.

In questo post del blog, supporremo che tu stia già utilizzando i servizi Hasura. Ti mostreremo come integrare Hasura con Logto per massimizzare la sicurezza dei tuoi dati. Se non hai un account Logto, iscriviti e inizia a usarlo subito!

Contesto

Hasura utilizza la gestione degli accessi basata sui ruoli, mentre Logto utilizza lo standard controllo degli accessi basato sui ruoli (RBAC).

Nel modello di Logto e nelle migliori pratiche per l'RBAC, consigliamo agli utenti di utilizzare il scope per corrispondere alla granularità più fine delle autorizzazioni, utilizzare il role come un insieme di scope per operazioni batch comode, e infine verificare il scope (solitamente dal lato dei fornitori di risorse) per controllare se un utente può eseguire un'operazione specifica.

In Hasura, un role corrisponde alla granularità più fine delle autorizzazioni, e i controlli delle autorizzazioni vengono effettuati contro i role. Pertanto, durante la configurazione di Logto, consigliamo di mappare un role su un scope esatto. Questo approccio può collegare insieme le autorizzazioni di Logto e Hasura per evitare confusione e uso scorretto.

Hasura può supportare il controllo degli accessi utilizzando Webhook o JWT. Nel nostro precedente blog post abbiamo introdotto come utilizzare i Webhook, e nelle sezioni seguenti spiegheremo come sfruttare il controllo degli accessi in modalità JWT di Hasura.

Iniziare

Iniziamo con un esempio semplice. Supponiamo che un utente abbia già due API in Hasura, GET /user e PATCH /user, corrispondenti a due ruoli: user:reader e user:maintainer, rispettivamente.

1. Crea la risorsa API di Hasura in Logto

Crea una risorsa API di Hasura in Logto.

API di Hasura

2. Crea ruoli in Logto in base alla configurazione di Hasura

Dobbiamo creare due scope per la risorsa API di Hasura menzionata nel passaggio 1, cioè read:user e maintain:user, e poi creare due ruoli: user:reader (contenente lo scope read:user) e user:maintainer (includendo lo scope maintain:user) per corrispondere uno a uno ai ruoli di Hasura. Assegna questi ruoli agli utenti Logto come necessario.

API di Hasura con scope

Ruolo reader per utenti

Ruolo maintainer per utenti

3. Configura la variabile d'ambiente HASURA_GRAPHQL_JWT_SECRET in Hasura per abilitare la modalità JWT

Esaminando le opzioni di configurazione JWT di Hasura, dobbiamo aggiungere e configurare la variabile d'ambiente HASURA_GRAPHQL_JWT_SECRET prima di poter utilizzare il JWT per il controllo degli accessi.

Esistono molte opzioni diverse che possono essere configurate, ma qui introduciamo il caso più semplice: è necessario configurare solo il jwk_url. Questo valore può essere ottenuto dal tuo endpoint di configurazione OpenID di Logto (https://your.logto.domain/oidc/.well-known/openid-configuration).

Config JWT di Hasura

4. Personalizza le richieste extra del token di accesso dell'utente

Utilizzando la funzione Custom JWT di Logto, personalizza la logica per aggiungere richieste extra al token di accesso utente in formato JWT.

Script del token di accesso dell'utente

Personalizza il metodo getCustomJwtClaims per aggiungere dati nel JWT su cui Hasura si basa per implementare il controllo degli accessi. Questo può includere dati relativi all'utente autorizzato in quel momento, inclusi i role che possiede, che possono essere accessibili tramite context.

Abbiamo anche definito una variabile d'ambiente USER_DEFAULT_ROLE_NAMES per evitare di codificare dettagli direttamente.

5. Integrare il Logto SDK

Una volta configurati Logto e Hasura, integra la tua app con il Logto SDK. Qui utilizziamo un esempio di Next per visualizzare in anteprima il token di accesso utente emesso da Logto dopo l'autenticazione.

Utente con ruoli

Per prima cosa, assegniamo i ruoli user:reader e user:maintainer creati in precedenza all'utente, e quindi accediamo come quell'utente.

Ottieni il token di accesso utente e richiedi le API di Hasura:

Conclusione

In questo articolo, forniamo un'altra metodologia per il controllo degli accessi basato su JWT supportata da Hasura, oltre ai Webhook.

Confrontando i processi di controllo degli accessi di Hasura tramite Webhook e JWT, possiamo vedere che l'approccio Webhook invia un Webhook a Logto e attende una risposta con ogni richiesta Hasura; mentre l'approccio basato su JWT può essere usato continuamente fino alla scadenza del JWT.

L'approccio JWT può ridurre il carico di rete ed eliminare la latenza di rete causata dai Webhook; nel frattempo, l'approccio Webhook può sincronizzare i cambiamenti delle autorizzazioni utente in tempo reale.

Gli utenti possono scegliere l'approccio appropriato in base a queste conclusioni, combinandole con le loro esigenze aziendali effettive.