Sono in procinto di creare una nuova API che deve supportare il multi-tenancy.
Riesco a capire come implementare la lettura e la scrittura dei dati in modo sicuro, senza dovermi preoccupare che i clienti possano sapere (o vedere) altri dati sui locatari.
Posso anche capire come determinare il tenant corretto per gli endpoint autenticati (I.E. utilizzando un ID titolare in un JWT).
Per gli endpoint di anonymouse tuttavia non so come affrontarlo. Ho trovato le seguenti soluzioni:
Soluzione 1:
Aggiungi un ID titolare come parametro. non mi piace perché vorrei che la multitenancy non fosse parte degli endpoint delle risorse.
Pro:
- Facile da implementare
Contro
- Non sembra che il multi-tenancy sia "trasparente"
Soluzione 2:
Crea un servizio tenant in grado di generare un token anonimo (non impostare il sub, solo un ID tenant).
Pro
- Aggiunge la trasparenza al multi-tenancy
- In una fase successiva, questo token può essere utilizzato come token di scambio insieme alle credenziali dell'utente per l'autenticazione con un servizio di autenticazione multi-tenant
Contro
- Aggiunge un altro 'endpoint di autenticazione'
Soluzione 3:
Utilizza i token dell'applicazione. Ogni inquilino potrebbe quindi avere più client, ognuno dei quali si autentica con una chiave e un segreto. Questo estende la seconda soluzione e ha i suoi vantaggi e svantaggi in cima: Pro
- I client diventano gli stessi utenti
- Possibilità di avere ambiti
Contro:
- Aggiunge maggiore complessità (i client multi-tenant devono avere più token)
- Aggiunge più amministrazione, ogni client ha bisogno di un token dell'applicazione per titolare
Domanda
Poiché questa è una parte cruciale della creazione di questi endpoint (e può diventare molti di loro) mi piacerebbe sentire la tua opinione su queste soluzioni, e forse ci sono altri approcci che non riesco a trovare, forse c'è uno schema per questo che non riesco a trovare. Il tuo contributo su questo sarà molto apprezzato.