Italiano
  • JWT personalizzato
  • pretese JWT
  • autorizzazione
  • autenticazione
  • OAuth 2.0
  • Logto

Aggiungi reclami personalizzati per i token di accesso JWT con Logto per potenziare la tua autorizzazione

In questo articolo, introdurremo come utilizzare la funzione di reclami JWT personalizzati di Logto per migliorare la flessibilità dell'autorizzazione e le prestazioni del fornitore di servizi attraverso un esempio reale.

Darcy Ye
Darcy Ye
Developer

Negli articoli precedenti, abbiamo menzionato che sempre più sistemi stanno utilizzando token di accesso in formato JWT per l'autenticazione degli utenti e il controllo degli accessi. Uno dei motivi importanti per questo è che JWT può contenere alcune informazioni utili, come i ruoli e i permessi degli utenti. Queste informazioni possono aiutarci a trasmettere le informazioni sull'identità dell'utente tra il server e il client, raggiungendo così l'autenticazione degli utenti e il controllo degli accessi.

Di solito, le informazioni contenute in JWT sono determinate dal server di autenticazione. Secondo il protocollo OAuth 2.0, JWT di solito contiene campi come sub (soggetto), aud (pubblico) e exp (tempo di scadenza), che sono comunemente noti come reclami. Questi reclami possono aiutare a verificare la validità del token di accesso.

Tuttavia, ci sono innumerevoli scenari in cui JWT viene utilizzato per la verifica, e i reclami comuni del JWT potrebbero spesso non soddisfare le esigenze degli utenti. Le persone spesso pensano che, poiché JWT può contenere alcune informazioni, possiamo aggiungere alcune informazioni per rendere l'autorizzazione più semplice?

La risposta è SÌ, possiamo aggiungere reclami personalizzati a JWT, come l'ambito attuale e il livello di abbonamento dell'utente. In questo modo, possiamo trasmettere le informazioni sull'identità dell'utente tra il client e il server (qui si fa riferimento al server che fornisce vari servizi diversi, chiamato anche fornitore di servizi), per ottenere l'autenticazione degli utenti e il controllo degli accessi.

Per i reclami JWT standard, fai riferimento a RFC7519. Logto, come soluzione di identità che supporta sia l'autenticazione che l'autorizzazione, ha esteso i reclami delle risorse e dell'ambito su questa base per supportare il RBAC standard. Anche se l'implementazione RBAC di Logto è standard, non è sufficientemente semplice e flessibile da adattarsi a tutti i casi d'uso.

In base a ciò, Logto ha lanciato una nuova funzionalità di personalizzazione dei reclami JWT, che consente agli utenti di personalizzare reclami JWT aggiuntivi, in modo che l'autenticazione degli utenti e il controllo degli accessi possano essere implementati in modo più flessibile.

Come funziona la personalizzazione dei reclami JWT in Logto?

Puoi accedere alla pagina di elenchi dei JWT personalizzati facendo clic sul pulsante "JWT claims" nella barra laterale.

pagina-di-elenchi-jwt-personalizzati

Iniziamo ad aggiungere reclami personalizzati per gli utenti finali.

Nell'editor a sinistra, puoi personalizzare la tua funzione getCustomJwtClaims. Questo metodo ha tre parametri di input: token, data e envVariables.

  • token è il payload grezzo del token di accesso ottenuto in base alle credenziali dell'utente finale corrente e alla configurazione del tuo sistema, e all'informazione relativa all'accesso dell'utente in Logto.
  • data è tutte le informazioni sull'utente in Logto, inclusi tutti i ruoli dell'utente, le identità di accesso social, le identità SSO, le appartenenze alle organizzazioni, ecc.
  • envVariables sono le variabili d'ambiente che hai configurato in Logto per lo scenario di utilizzo del token di accesso dell'utente finale corrente, come la/le chiave e API degli API esterni richiesti, ecc.
dettagli-pagina-dati-utente

Le schede a destra possono essere espanse per mostrare l'introduzione dei parametri corrispondenti, e puoi anche impostare le variabili d'ambiente per lo scenario corrente qui.

dettagli-pagina-test-utente

Dopo aver letto le introduzioni di tutte le schede a destra, puoi passare alla modalità di test, dove puoi modificare i dati di test e utilizzare i dati modificati per verificare se il comportamento dello script che hai scritto nell'editor di codice a sinistra soddisfa le tue aspettative.

Questo è un diagramma di sequenza che mostra il processo di esecuzione della funzione getCustomJwtClaims quando un utente finale avvia una richiesta di autenticazione a Logto e alla fine ottiene il token di accesso in formato JWT restituito da Logto.

Se la funzione JWT personalizzata non è abilitata, il passaggio 3 nella figura verrà saltato e il passaggio 4 verrà eseguito subito dopo il passaggio 2. A questo punto, Logto assumerà che il valore di ritorno di getCustomJwtClaims sia un oggetto vuoto, e quindi continuerà a eseguire i passaggi successivi.

Potenzia la tua autorizzazione con reclami JWT personalizzati: un esempio pratico

Nella sezione precedente, abbiamo introdotto il principio di funzionamento del Logto JWT personalizzato. In questa parte, ti mostreremo come utilizzare i reclami personalizzati di Logto per migliorare la flessibilità dell'autorizzazione e le prestazioni del fornitore di servizi attraverso un esempio reale.

Configurazione dello scenario

Il team di John ha sviluppato un'App Assistente AI che consente agli utenti di conversare con robot AI per ottenere vari servizi.

I servizi robot AI sono divisi in servizi gratuiti e a pagamento. I servizi gratuiti includono raccomandazioni speciali per tariffe aeree, mentre i servizi a pagamento includono previsioni sulle azioni.

L'App Assistente AI utilizza Logto per gestire tutti gli utenti, che sono divisi in tre tipi: utenti gratuiti, utenti prepagati e utenti premium. Gli utenti gratuiti possono utilizzare solo servizi gratuiti, gli utenti prepagati possono utilizzare tutti i servizi (addebito in base all'utilizzo), e gli utenti premium possono utilizzare tutti i servizi (ma hanno limiti di velocità per prevenire usi dannosi).

Inoltre, l'App Assistente AI utilizza Stripe per gestire i pagamenti degli utenti e ha il proprio servizio di log per registrare i log delle operazioni degli utenti.

Configurazioni di Logto

Per prima cosa, creiamo risorse API per il servizio App Assistente AI e creiamo due ambiti, recommend:flight e predict:stock.

risorsa-app-assistente-ai

Quindi creiamo due ruoli, free-user e paid-user, e assegniamo gli ambiti corrispondenti:

  • Assegna l'ambito recommend:flight al ruolo free-user.
  • Assegna entrambi gli ambiti recommend:flight e predict:stock al ruolo paid-user.
ruolo-free-user
ruolo-paid-user

Infine, creiamo tre utenti, free-user, prepaid-user e premium-user, e assegniamo i ruoli corrispondenti:

  • Assegna il ruolo free-user all'utente free-user.
  • Assegna il ruolo paid-user agli utenti prepaid-user e premium-user.
assegna-ruolo-free-user
assegna-ruolo-paid-user

Come mostrato nella figura seguente, per implementare le informazioni di autorizzazione richieste per lo scenario descritto sopra, speriamo di includere le informazioni su ruoli, saldo e numOfCallsToday dell'utente attualmente autenticato nel JWT. Quando si verifica il token di accesso nell'App Assistente AI, queste informazioni possono essere utilizzate per eseguire rapidamente la verifica dei permessi.

test-reclami-jwt-personalizzati

Dopo aver configurato gli envVariables, implementiamo la funzione getCustomJwtClaims e clicchiamo sul pulsante "Esegui test" per vedere il risultato dei reclami JWT extra in base ai dati di test attuali.

Poiché non abbiamo configurato i dati di test per data.user.roles, i roles mostrati nel risultato sono un array vuoto.

Controlla se la funzione JWT personalizzata è attiva

Secondo la configurazione di Logto di cui sopra, abbiamo ottenuto i risultati corrispondenti nel test. Successivamente, utilizzeremo l'app di esempio fornita da Logto per verificare se il nostro JWT personalizzato è efficace. Trova l'SDK con cui hai familiarità su Logto SDKs e distribuisci un'app di esempio seguendo la documentazione e il corrispondente repository GitHub.

In base alla configurazione descritta sopra, prendendo ad esempio il React SDK, dobbiamo aggiornare la configurazione corrispondente in LogtoConfig:

Dopo aver effettuato l'accesso all'utente free_user nell'app di esempio che simula l'App Assistente AI, possiamo vedere le informazioni su ruoli, saldo, numOfCallsToday, isPaidUser e isPremiumUser che abbiamo aggiunto visualizzando la parte del payload del token di accesso JWT.

anteprima-token-di-accesso-dell'app-di-esempio-gratuito

I valori di saldo, numOfCallsToday, isPaidUser e isPremiumUser sono coerenti con il test precedente, e roles è uguale a ["free-user"]. Questo perché nel processo di accesso reale dell'utente finale, otterremo tutti i dati accessibili dell'utente e li elaboreremo di conseguenza.

anteprima-token-di-accesso-dell'app-di-esempio-premium

Per gli utenti premium, possiamo vedere che roles è ["paid-user"] e sia isPaidUser che isPremiumUser sono true.

Aggiorna la logica di autorizzazione del fornitore di servizi

Nei passaggi precedenti, abbiamo aggiunto reclami personalizzati basati sulle esigenze aziendali al token di accesso degli utenti. Successivamente, possiamo utilizzare questi reclami per eseguire rapidamente la verifica dell'autorizzazione.

Qui forniamo la logica di Logto per la verifica dei token di accesso JWT sul lato API. L'implementazione completa del codice può essere trovata nel repository GitHub:

Puoi fare riferimento alla logica dell'API di Logto per verificare i token di accesso e personalizzarla in base alla tua logica aziendale. Ad esempio, per lo scenario dell'App Assistente AI descritto qui, puoi aggiungere la logica di verifica per reclami personalizzati come ruoli, saldo, numOfCallsToday, isPaidUser e isPremiumUser nella funzione verifyBearerTokenFromRequest.

L'esempio sopra è per lo scenario in cui influisce sull'accesso dell'utente finale e sull'ottenimento del token di accesso JWT. Se il tuo caso d'uso è macchina a macchina (M2M), puoi anche configurare separatamente i reclami JWT personalizzati per le app M2M.

Configurare JWT personalizzati per gli utenti non influirà sul risultato dell'ottenimento dei token di accesso delle app M2M, e viceversa.

A causa della generalità delle connessioni M2M, Logto non fornisce attualmente la funzione del metodo getCustomJwtClaims delle app M2M per accettare dati interni da Logto. Per altri aspetti, il metodo di configurazione dei JWT personalizzati per le app M2M è lo stesso di quello delle app utente. Questo articolo non ne parlerà in dettaglio. Puoi utilizzare la funzione JWT personalizzata di Logto per iniziare.

Perché utilizzare reclami JWT personalizzati?

Abbiamo fornito lo scenario dell'App Assistente AI per John e come utilizzare la funzione JWT Personalizzata di Logto per ottenere una verifica dell'autorizzazione più flessibile. Durante questo processo, possiamo vedere i vantaggi della funzione JWT Personalizzata:

  1. Senza la funzione JWT Personalizzata, gli utenti devono richiedere un'API esterna (come fai in getCustomJwtClaims) ogni volta che verificano i permessi. Per il fornitore di servizi che fornisce questa API, ciò potrebbe aumentare il carico extra. Con la funzione JWT Personalizzata, queste informazioni possono essere messe direttamente all'interno di JWT, riducendo le chiamate frequenti all'API esterna.
  2. Per i fornitori di servizi, la funzione JWT Personalizzata può aiutarli a verificare i permessi degli utenti più velocemente, specialmente quando il client chiama frequentemente il fornitore di servizi, migliorando le prestazioni del servizio.
  3. La funzione JWT Personalizzata può aiutarti a implementare rapidamente informazioni aggiuntive di autorizzazione richieste dall'azienda, e le informazioni possono essere trasmesse tra il client e il fornitore di servizi in modo sicuro poiché JWT è autonomo e può essere criptato, quindi è difficile da falsificare.

Allo stesso tempo, poiché getCustomJwtClaims viene eseguito ogni volta che un utente ha bisogno che Logto emetta un token di accesso, è necessario evitare di eseguire logiche e richieste di API esterne troppo complesse con elevate esigenze di banda. Altrimenti, potrebbe volerci troppo tempo perché l'utente finale attenda il risultato di getCustomJwtClaims durante il processo di accesso. Se il tuo getCustomJwtClaims restituisce un oggetto vuoto, ti raccomandiamo fortemente di eliminare temporaneamente questo elemento di configurazione fino a quando non avrai effettivamente bisogno di utilizzarlo.

Conclusione

In questo articolo, Logto ha esteso il token di accesso JWT di base e ha ampliato la funzione di reclami JWT extra per consentire agli utenti di inserire informazioni aggiuntive sull'utente finale nel token di accesso JWT in base alle proprie esigenze aziendali, in modo che dopo il login dell'utente, i permessi dell'utente possano essere verificati rapidamente.

Abbiamo fornito lo scenario dell'App Assistente AI di John e dimostrato come utilizzare la funzione JWT Personalizzata di Logto per ottenere una verifica dell'autorizzazione più flessibile. Abbiamo anche evidenziato alcuni punti chiave dell'uso dei JWT personalizzati. In combinazione con scenari aziendali reali, gli utenti possono inserire varie informazioni relative all'utente nel token di accesso JWT in base alle loro esigenze aziendali, in modo che il fornitore di servizi possa verificare rapidamente i permessi dell'utente.