Una delle caratteristiche fondamentali di Strapi è il suo sistema di autenticazione e autorizzazione, che garantisce che solo gli utenti autorizzati possano accedere alle risorse protette. In questo post, esploreremo il modello di autenticazione di Strapi, come funziona e come può essere personalizzato per adattarsi alle esigenze specifiche del tuo progetto.
Modello di Autenticazione in Strapi
Strapi implementa un sistema di autenticazione basato su JWT (JSON Web Tokens). Ecco i componenti chiave del modello di autenticazione di Strapi:
Registrazione e Login degli Utenti: Strapi offre endpoint API per la registrazione (/auth/local/register) e il login (/auth/local). Quando un utente si registra o effettua il login, Strapi genera un token JWT che viene utilizzato per autenticare le richieste future.
JWT (JSON Web Tokens): Una volta autenticato, l’utente riceve un token JWT che deve essere incluso nell’header di autorizzazione (Authorization: Bearer <token>) per ogni richiesta autenticata. Questo token contiene informazioni crittografate sull’utente e ha una durata configurabile.
Ruoli e Permessi: Strapi include un sistema di ruoli e permessi che permette di definire le azioni che ogni ruolo può eseguire. I ruoli predefiniti includono Authenticated e Public, ma possono essere creati ruoli personalizzati con permessi specifici per diverse operazioni (creazione, lettura, aggiornamento, eliminazione) su ciascuna risorsa.
Protezione degli Endpoint: Gli endpoint API possono essere protetti configurando i permessi a livello di ruolo. Questo significa che solo gli utenti con il ruolo appropriato possono accedere o modificare determinate risorse.
Implementazione
Installazione di strapi:
npx create-strapi-app my-project --quickstart
Dal pannello di amministrazione di Strapi, Settings > Roles & Permissions. Qui è possibile configurare i permessi per i ruoli predefiniti e crearne di nuovi secondo le esigenze del progetto.
Gestione degli utenti
Gli utenti possono essere creati direttamente attraverso l’interfaccia di amministrazione o tramite API. Ecco un esempio di richiesta POST per registrare un nuovo utente:
curl -X POST http://localhost:1337/auth/local/register \
-H "Content-Type: application/json" \
-d '{"username":"exampleUser","email":"user@example.com","password":"password123"}'con la relativa risposta json da parte dell’API:
{
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"username": "exampleUser",
"email": "user@example.com"
}
}
Da questo momento tutte le chiamate autenticate dovranno essere nel formato:
curl -X GET http://localhost:1337/articles \ -H "Authorization: Bearer <token>"
Il token messo a disposizione da strapi non prevede di default il modello a refresh token. Per poter implementare il refresh token è necessario modificare la configurazione manualmente, introducento alcuni concetti dell’architettura di strapi. In prossimo post vedremo come sia possibile implementare il refresh token.