Autorizzazione con OpenFGA
Da Zanzibar alla multi-tenancy, cinque articoli su permessi che scalano
Quando i permessi smettono di stare in una colonna `role` sulla tabella utenti, il modello a ruoli non regge più. La serie parte dai concetti di Google Zanzibar, li collega a Keycloak, e arriva ai problemi che si incontrano davvero: isolare più organizzazioni, risolvere gerarchie profonde, e il costo di ListObjects quando le risorse diventano molte.
Il momento in cui i ruoli smettono di bastare
Finché i permessi stanno in una colonna role sulla tabella utenti, il modello a ruoli funziona e non c'è motivo di cambiarlo. Smette di funzionare quando arriva la prima richiesta che non ci sta dentro: questo documento è condiviso con quell'utente, ma solo in lettura, e solo finché resta nel progetto di cui è membro.
A quel punto si aggiunge una tabella di eccezioni, poi un flag, poi un if nel controller. Il permesso smette di essere un dato e diventa codice sparso, e nessuno sa più rispondere alla domanda che conta: chi può vedere questa risorsa, e perché?
Google ha affrontato lo stesso problema su scala e ne ha pubblicato il modello, Zanzibar: i permessi diventano tuple di relazione, non ruoli. OpenFGA è l'implementazione open source di quel modello.
La serie parte dai concetti, li collega a Keycloak per separare autenticazione e autorizzazione, e arriva ai problemi che si incontrano davvero: isolare più organizzazioni nello stesso sistema, risolvere gerarchie profonde, e il costo delle query inverse quando le risorse diventano molte.
Cosa imparerai
- ✓ Capire il modello Zanzibar: tuple di relazione al posto dei ruoli
- ✓ Collegare OpenFGA a Keycloak separando autenticazione e autorizzazione
- ✓ Isolare più organizzazioni nello stesso sistema senza duplicare il modello
- ✓ Risolvere gerarchie profonde senza scrivere codice applicativo
- ✓ Riconoscere quando ListObjects diventa il collo di bottiglia, e come aggirarlo
Articoli della serie
- 01Zanzibar per Tutti: Concetti e Modello di Autorizzazione 14 min
Da RBAC a Zanzibar: come funziona il modello a tuple di OpenFGA, il DSL per le relazioni, e le tre domande fondamentali dell'autorizzazione.
→ - 02OpenFGA + Keycloak: Identità e Permessi si Parlano 15 min
Come integrare OpenFGA con Keycloak: sincronizzazione utenti, JWT come ponte, contextual tuples e strategie per tenere identità e autorizzazione allineate.
→ - 03Multitenancy con OpenFGA: Isolamento Senza Moltiplicare la Complessità 13 min
Due strategie per multitenancy con OpenFGA: store-per-tenant e type-per-tenant. Come ottenere isolamento strutturale senza WHERE tenant_id ovunque.
→ - 04Gerarchie Profonde, Query Inverse e il Problema WHERE 17 min
Come gestire gerarchie a N livelli in OpenFGA, ottimizzare ListObjects con fast/slow path, e implementare Dynamic Data Masking come pattern complementare.
→ - 05ListObjects in Produzione: Caching, Pre-materializzazione e BatchCheck 13 min
Caching, read model pre-materializzato e BatchCheck per risolvere il collo di bottiglia di ListObjects in OpenFGA, con strategie di invalidazione.
→