Passa ai contenuti principali

Multitenant


Multitenant





Definizione


Un tenant è un gruppo omogeneo di utenti di una applicazione. In ambito SaaS un tenant è un "abbonato" al servizio che si fornisce o un cliente della applicazione.

Con multi-tenant si intende una architettura che consente a più tenant di utilizzare la stessa istanza fisica ma mantenendo una separazione delle istanze logiche della stessa applicazione.

Abbiamo la nostra applicazione distribuita in cloud e gli utenti:



Ognuno potrà vedere solo i suoi dati. La stessa cosa se gli utenti sono raggruppati in organizzazioni: ognuno potrà vedere solo i dati della propria organizzazione:


Architettura

Dal punto di vista tecnico deve succedere che la stessa istanza dell'applicazione deve gestire le utenze mantenendo una separazione logica degli utenti e una separazione fisica dei dati per implementare il massimo livello di separazione fra i tenant: un database per tenant. 



Quindi anche se i tenant condividono le stesse risorse che possono essere la VM o i dischi per i dati, conservano una separazione logica.

Soluzione proposta

Vediamo una applicazione multitenant dal punto di vista della gestione degli utenti e del flusso del processo di gestione di un sistema multitenant.
In una applicazione multitenant gli utenti vanno gestiti nel contesto dello specifico tenant di appartenenza.
Le fasi di autenticazione e autorizzazione devono essere gestiti nello specifico tenant.

Prerequisiti


Chiariamo due prerequisiti di base con l’obiettivo di ottenere una separazione forte fra i dati dei vari tenant.

Autenticazione

- Gli utenti accedono tutti dallo stesso endpoint.
- Gli utenti accedono specificando le loro credenziali e l'organizzazione di appartenenza (pippo@azienda1.it).
- Gli utenti della stessa organizzazione fanno parte dello stesso tenant
- Quando un utente fa l'accesso l'applicazione conosce a quale tenant questo appartiene.


Autorizzazione

- Quando si autorizza l'utente ad una operazione (visualizzare i record di una tabella) l'app deve tenere in considerazione il tenant dell'utente.
- I ruoli utente come "Amministratore" o "Utente" devono essere gestiti dal cliente e non dal fornitore del SaaS.
- I ruoli devono essere consistenti nel tenant di appartenenza dell'utente, al di fuori di questo non devono esistere.

Le richieste, all’interno dell’intero ecosistema applicativo, devono seguire il seguente flusso:
-          Accettare la connessione in arrivo  e autenticare l’utente se necessario
-          Intercettare le richieste e identificare il tenant di appartenenza dell’utente che ha fatto la richiesta
-          Stabilire una connessione con lo schema o il database collelato al tenant.

L’identificazione del tenant di apparteneza è ottenuto mediante l’uso di uno schema di default che contiene l’informazione che lega l’utente al tenant. Un utente può essere autenticato da un servizio esterno che passa le informazioni sul tenant usando l’http header.
Per fare questo si può definire un header http personalizzato “X-TenantID” che identifica il tenant di appartenenza.

Identificare il tenant

Dobbiamo determinare a quale tenant si riferiscono le richieste. Usando Spring Interceptor per intercettare le richieste http e prendere dall’header l’informazione sul tenant. Il tenantID così ricavato viene conservato in una variabile ThreadLocal che viene svuotata dopo il completamento della richiesta.
L’interceptor ottiene il valore dell’header http “X-TenantID” per ogni richiesta e setta il tenant corrente nella classe “TenantContext”. Se non c’è l’header sul tenant viene restituito un errore.

Connessione al database

Una volta che si è identificato il tenant di appartenenza della request bisogna reindirizzare questa su una specifica connessione di database.
Viene usata una tabella “DataSourceConfig” nello schema pubblico per contenere il legame fra tenant e connessione al database di competenza.


Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione 4.0 Internazionale (CC BY 4.0) - Condividi allo stesso modo

Commenti

Post popolari in questo blog

Telecamere Ip con accesso "nascosto"

Telecamere Ip con accesso "nascosto" Storia triste di un auto-hacking obbligato che mi ha fatto scoprire come la nostra privacy è realmente messa a rischi. Storia Ho acquistato dal mercatino/fiera del Radioamatore di Fasano quattro telecamere IP. La scatola riporta "Smart Camera" LF4810. Ne ho montata una e testata in tutte le sue funzionalità per oltre un mese. Chiaramente la manualistica scarsissima, come da tradizione in questi prodotti cinesi di costo molto concorrenziale, consiste in un "pieghevole" di 4 facciate. Chiaramente non erano documentate le impostazioni necessarie per attivare i protocolli ONVIF e RTSP che mi sono indispensabili per l'uso che ne devo fare. Nonostante questa scarsa documentazione dopo l'installazione base fatta con l'apposita app: tutto sembrava corretto. Chiaramente la prima azione che ho compiuto è stata quella di cambiare la password che di default è "123". Subito dopo h...

Dynamic DNS con Duckdns.org in HTTPS

Obiettivo Avere un dominio https con certificato valido da usare come endpoint pubblico per Homeassistant e per un WebHook per i bot telegram. Fase 1 Registrazione del dominio in un servizio di dynamic DNS come https://www.duckdns.org/   : Scegliere per quale sistema operativo installare il client che si occuperà dell'aggiornamento dell'ip: Seguire la semplice guida per la configurazione del processo cron: Fase 2 Creazione del certificato e installazione sul server. Di tutto questo si occuperà una applicazione che si chiama certbot. $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python-certbot-apache $ sudo certbot --apache -d ol3.duckdns.org -d www.ol3.duckdns.org Fase 3 Esporre il servizio https sulla rete pubblica. Aprire o reindirizzare la porta 443 verso l'host sul quale si è fatta la configurazione di certbot dal proprio router. Il certificato di certbot è valido per novanta giorn...

Wemos D1 mini ESP8266 - Aggiornamenti OTA

Wemos D1 mini - Aggiornamenti OTA Cosa è Può risultare scomodo dover collegare con un cavo usb un ESP8266 e derivati (come in questo caso un Wemos D1 mini) ad un pc per un semplice aggiornamento software.  OTA sta per "Over The Air". Con questa tecnologia si ha la possibilità di modificare il firmware di questi microcontrollori mediante la wi-fi.  Come funziona Per ottenere questa funzionalità ci si è inventato un meccanismo molto semplice: il nostro microcontrollore, dotato della capacità di aggiornamenti OTA, ha in carico un firmware che all'avvio non fa altro che, usando la libreria ArduinoOTA, collegarsi alla wi-fi (della quale avremo fornito SSID e Password) e mediante il " Multicast DNS " dichiara la sua presenza sulla WI-FI LAN, l' Ide di Arduino rileva questa presenza e ci fornisce il supporto alla comunicazione mediante wi-fi (la porta di rete rilevata prenderà il nome del modello e l'ultima parte del suo mac-address per identificarlo, se non r...