Serie · 5 articoli

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.

5
Articoli pubblicati
72
Minuti di lettura
Avanzato
Livello
OpenFGAZanzibarReBACKeycloakMulti-tenancyAuthorization

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

  1. 01
    Zanzibar 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.

  2. 02
    OpenFGA + 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.

  3. 03
    Multitenancy 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.

  4. 04
    Gerarchie 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.

  5. 05
    ListObjects 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.