Token HS256 vs RS256: Quando e Come Usarli
Panoramica
La piattaforma utilizza due famiglie di token JWT per autenticare attori diversi. L'API Gateway (api.service.js) li valida in sequenza: prima HS256, poi RS256. Comprendere quale token usare e fondamentale per integrare correttamente dispositivi, operatori e utenti amministrativi.
Token HS256 (Simmetrico)
I token HS256 sono firmati con una chiave segreta condivisa (JWT_SECRET) e vengono generati direttamente dal backend. Sono pensati per comunicazioni machine-to-machine e per operatori di cassa.
Token Dispositivo
Generato dal servizio licensing durante l'enrollment. Validita: 365 giorni. Contiene deviceId, tenantId, licenseLevel e type: "device".
curl -X POST "https://api.example.com/api/licensing/enroll" \
-H "Content-Type: application/json" \
-d '{
"otp": "AB-1234",
"deviceInfo": {
"uuid": "device-uuid-001",
"platform": "windows",
"model": "Surface Pro",
"name": "Cassa 1"
}
}'
Risposta: { "deviceToken": "<JWT_HS256>", "config": { ... } }.
Token Operatore
Generato dal servizio operator-management al login via PIN. Validita: 8 ore. Contiene operatorId, operatorCode, tenantId, role, permissions e type: "operator".
curl -X POST "https://api.example.com/api/operators/login" \
-H "Authorization: Bearer <DEVICE_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "pin": "1234", "deviceId": "device-uuid-001" }'
Token Supporto Tecnico
Generato dal servizio support-access con issuer pos-backend-support. Include sessionId, techId, scope e viene validato con controllo sessione attiva, JTI blacklist e device binding (X-Device-ID).
Token RS256 (Asimmetrico)
I token RS256 sono emessi da Keycloak e validati tramite chiave pubblica JWKS. Sono destinati a utenti amministrativi che accedono da pos_admin_console o altre applicazioni web.
# Ottenere token da Keycloak
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"
Il token RS256 contiene i claim standard (sub, preferred_username, email) piu claim personalizzati estratti dai gruppi Keycloak: tenantId, resellerCode e role.
Ordine di Validazione nell'API Gateway
L'API Gateway tenta la validazione in tre passi:
- HS256 con issuer
pos-backend-- token dispositivo o operatore - HS256 con issuer
pos-backend-support-- token supporto tecnico - RS256 Keycloak -- token utente amministrativo
Se tutti e tre falliscono, la richiesta viene rifiutata con 401 Unauthorized.
Quando Usare Quale Token
| Scenario | Token | Generato da |
|---|---|---|
| App cassa/cameriere (comunicazione device) | HS256 Device | licensing.enroll |
| Operatore di cassa (login PIN) | HS256 Operator | operator-management.login |
| Tecnico manutentore | HS256 Support | support-access.generateAppToken |
| Admin console web | RS256 Keycloak | Keycloak OIDC |
FAQ
D: Posso usare un token RS256 dall'app Flutter cassa? R: Tecnicamente si, ma non e consigliato. L'app cassa deve usare il flusso enrollment (OTP) che genera un token HS256 dispositivo con validita annuale, ottimizzato per scenari offline-first.
D: Come rinnovo un token dispositivo scaduto?
R: Chiamare POST /licensing/refresh con il token scaduto. Il backend verifica l'identita del device e genera un nuovo token senza richiedere un nuovo OTP.
D: Il JWT_SECRET deve essere lo stesso su tutti i nodi?
R: Si. Tutti i nodi Moleculer devono condividere lo stesso JWT_SECRET (variabile ambiente) per poter validare i token HS256 generati da qualsiasi istanza.
Vedi Anche
- Registrazione Dispositivi e Operatori -- Flusso completo di enrollment
- Configurazione Keycloak -- Setup realm e client RS256
- Panoramica Architettura -- Visione d'insieme della piattaforma