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.
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.
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.
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).
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.
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.
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.