Determinazione del titolare per l'endpoint anonimo multi tenant

1

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.

    
posta LangeJan 11.07.2018 - 12:44
fonte

1 risposta

1

Considera di passare il tennant come parte dell'intestazione dell'host. vale a dire

{tennant}.myapi.com/{resource}/{action}

Questo risolve le tue preoccupazioni in merito alla trasparenza e mantiene ciascun tenant separato.

Un possibile problema è che aggiunge più endpoint per i client multi-tenant. Ma questo potrebbe essere considerato una buona cosa in qualche modo in quanto mantiene la separazione.

    
risposta data 11.07.2018 - 13:01
fonte

Leggi altre domande sui tag