Proteggi la tua API Express.js con JWT e Logto
Scopri come proteggere i tuoi endpoint API Express.js con JSON Web Tokens (JWT) e Logto.
Scopri come proteggere i tuoi endpoint API Express.js con JSON Web Tokens (JWT) e Logto.
Quando sviluppi un'applicazione web, è fondamentale proteggere i tuoi endpoint API da accessi non autorizzati. Immagina di costruire un sito web di shopping online; sicuramente non vuoi che i ladri informatici sfruttino la tua API.
Supponendo che tu abbia già costruito un'applicazione Express.js con autenticazione utente, dove gli utenti devono effettuare l'accesso prima di intraprendere determinate azioni. Se non lo hai fatto, puoi iniziare il tuo percorso con Logto. Sono necessarie solo poche righe di codice per stabilire un flusso di autenticazione utente.
Tuttavia, anche dopo l'autenticazione utente, affronti varie scelte per proteggere i tuoi endpoint API. Sfortunatamente, la maggior parte di queste opzioni ha i suoi svantaggi:
In questo tutorial, dimostreremo come fortificare i tuoi endpoint API utilizzando JSON Web Tokens (JWT) e Logto. Questo approccio offre scalabilità e costi extra minimi.
Prima di iniziare, assicurati di avere quanto segue:
Logto sfrutta appieno RFC 8707: Resource Indicators per OAuth 2.0 per proteggere i tuoi endpoint API. Ciò significa che puoi definire le tue risorse API utilizzando i loro URL effettivi.
Naviga nella scheda "Risorse API" nella Console Logto e fai clic su "Crea risorsa API" per crearne una nuova. Ad esempio, se desideri proteggere l'endpoint /api/products, puoi utilizzare l'URL https://yourdomain.com/api/products come identificatore.

Per procedere, dovrai integrare l'SDK Logto nella tua applicazione client. Questa applicazione potrebbe differire dal tuo backend Express.js; ad esempio, potresti avere un'app React che utilizza Express.js come server API backend.
Dovrai anche regolare la configurazione dell'SDK Logto per informare Logto che desideri richiedere un token di accesso per la tua API in questo grant. Ecco un esempio usando React:
Una volta che un utente effettua l'accesso con Logto, isAuthenticated all'interno dell'SDK Logto diventerà true:
Ora puoi usare il metodo getAccessToken per recuperare un token di accesso per la tua API:
Infine, includi questo token di accesso nell'intestazione Authorization quando fai richieste alla tua API:
Nella tua applicazione Express.js, installa la libreria jose per la verifica dei JWT:
Poiché stiamo usando l'autenticazione Bearer, estrai il token di accesso dall'intestazione Authorization:
Successivamente, crea un middleware per verificare il token di accesso:
Ora puoi impiegare questo middleware per proteggere i tuoi endpoint API:
Con questo approccio, non hai bisogno di contattare il server Logto ogni volta che arriva una richiesta. Invece, recuperi il JSON Web Key Set (JWKS) dal server Logto una volta e successivamente verifichi i token di accesso localmente.
Fino a questo punto, abbiamo solo verificato che un utente abbia effettuato l'accesso con Logto. Ancora non sappiamo se l'utente possiede il permesso appropriato per accedere all'endpoint API. Questo perché Logto permette a chiunque di ottenere un token di accesso per una risorsa API esistente.
Per risolvere questo problema, possiamo utilizzare il controllo degli accessi basato su ruoli (RBAC). In Logto, puoi definire ruoli e assegnare permessi a essi. Consulta questo tutorial per imparare come definire ruoli e permessi in Logto.
Dopo aver definito ruoli e permessi, puoi aggiungere l'opzione scopes al componente LogtoProvider:
Logto emetterà quindi un token di accesso con l'ambito/i appropriato/i all'utente. Ad esempio, se un utente ha solo l'ambito read:products, il token di accesso conterrà solo quell'ambito:
Se un utente ha sia gli ambiti read:products che write:products, il token di accesso conterrà entrambi gli ambiti con uno spazio come delimitatore:
Nella tua applicazione Express.js, puoi verificare se il token di accesso contiene l'ambito/i corretto/i prima di concedere l'accesso all'endpoint API:
Proteggere gli endpoint API pur garantendo la scalabilità non è un compito facile. In Logto, ci sforziamo di semplificare l'autenticazione delle richieste per gli sviluppatori, permettendoti di concentrarti maggiormente sulla logica aziendale.
Per qualsiasi domanda, sentiti libero di unirti al nostro server Discord. La nostra comunità è sempre felice di assisterti.