Configurazione Keycloak per la Piattaforma
Panoramica
La piattaforma utilizza Keycloak come identity provider per gli utenti amministrativi (RS256). I token Keycloak vengono validati dall'API Gateway tramite JWKS. Questa guida descrive come creare e configurare il realm, i client e i claim personalizzati necessari.
Creazione del Realm
Creare un realm dedicato alla piattaforma. Il nome predefinito e pos-enterprise.
- Accedere alla console admin di Keycloak (
https://<KEYCLOAK_HOST>/auth/admin) - Cliccare Create Realm
- Impostare il nome:
pos-enterprise - Abilitare il realm
Il realm name deve corrispondere alla variabile ambiente KEYCLOAK_REALM del backend.
Configurazione Client
Creare un client per la admin console e uno per eventuali integrazioni:
- In Clients, cliccare Create Client
- Client ID:
pos-admin(o il nome desiderato) - Client Protocol:
openid-connect - Access Type:
publicper SPA (admin console Vue.js) oppureconfidentialper integrazioni server-side - Valid Redirect URIs:
https://admin.example.com/* - Web Origins:
https://admin.example.com
Per client confidential, annotare il Client Secret dalla tab Credentials.
Gruppi e Ruoli
La piattaforma estrae il contesto utente (tenant, reseller, ruolo) dalla gerarchia dei gruppi Keycloak, non dai realm roles. La struttura consigliata:
/resellers
/RESELLER_CODE
/tenants
/TENANT_ID
/roles
/admin
/manager
/viewer
L'API Gateway chiama extractContextFromGroups(decoded.groups) per estrarre tenantId, resellerCode e role dal percorso del gruppo piu specifico assegnato all'utente.
Realm Roles Consigliati
Aggiungere i seguenti realm roles per compatibilita:
platform-admin-- Accesso globale a tutti i tenantreseller-admin-- Gestione tenant del proprio resellertenant-admin-- Amministrazione singolo tenant
Claims Personalizzati
Per popolare ctx.meta.user correttamente, assicurarsi che il token contenga i claim groups. Creare un Protocol Mapper nel client:
- Aprire il client
pos-admine andare nella tab Client Scopes (o Mappers) - Aggiungere un mapper:
- Name:
groups - Mapper Type:
Group Membership - Token Claim Name:
groups - Full group path: ON
- Add to ID token: ON
- Add to access token: ON
- Name:
Variabili Ambiente Backend
Configurare le seguenti variabili nel file .env del backend:
KEYCLOAK_URL=https://auth.example.com/auth
KEYCLOAK_REALM=pos-enterprise
# Per sviluppo locale senza Keycloak:
SKIP_AUTH=true
DEV_TENANT_ID=demo
L'API Gateway utilizza KEYCLOAK_URL e KEYCLOAK_REALM per costruire l'endpoint JWKS (/realms/{realm}/protocol/openid-connect/certs) e validare la firma RS256 dei token.
Verifica Configurazione
Dopo la configurazione, verificare il flusso completo:
# Ottenere un token
curl -X POST "https://auth.example.com/auth/realms/pos-enterprise/protocol/openid-connect/token" \
-d "grant_type=password&client_id=pos-admin&username=admin@demo.com&password=secret"
# Usare il token verso l'API
curl -X GET "https://api.example.com/api/tenant-management/list" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
Se la risposta e 200 OK con i dati del tenant, la configurazione e corretta.
FAQ
D: Posso usare un Keycloak esistente condiviso con altri sistemi? R: Si, basta creare un realm dedicato. La piattaforma non interferisce con altri realm sullo stesso server Keycloak.
D: Cosa succede se SKIP_AUTH e true in produzione?
R: Tutte le richieste vengono autenticate come dev-user con tenant demo. Non usare mai SKIP_AUTH=true in ambienti di produzione.
D: Come aggiungo un nuovo utente admin per un tenant?
R: Creare l'utente in Keycloak, assegnarlo al gruppo /resellers/RESELLER/tenants/TENANT_ID/roles/admin. L'API Gateway estrarra automaticamente tenantId e ruolo dal gruppo.
Vedi Anche
- Token HS256 vs RS256 -- Differenze tra i due tipi di token
- Registrazione Dispositivi -- Flusso enrollment con token HS256
- Installazione Cassa -- Setup completo dell'applicazione cassa