Stiamo valutando due diverse architetture per l'impostazione di KeyCloak per consentire agli utenti di concedere l'accesso ad altri utenti e terze parti agli inquilini all'interno il nostro sistema.
Sto cercando feedback esperti su questi per cercare di risparmiare un po 'di tempo con la sperimentazione.
Primo approccio Registrazione dinamica del client
In questo approccio avremmo diversi servizi statici (server di risorse) che orchestrano l'accesso e quindi ogni titolare è rappresentato tramite un client registrato dinamicamente.
Avremmo quindi un set statico di ruoli (permessi) che vengono assegnati tra l'utente e il client quando gli viene concesso l'accesso.
Quindi l'universo dei ruoli è stato risolto. La proliferazione qui è tra utenti e client o risorse-server e client.
Secondo approccio Generazione dinamica dei ruoli
In questo approccio stiamo considerando la possibilità di generare ruoli (permessi) dinamici per ciascun titolare nel sistema. Stiamo pensando di rispecchiare lo stile URN di AWS in modo che le autorizzazioni sembrino qualcosa di ssl_certificate_key
Seguono la struttura generale urn:service:tenant:permission
per es.
-
urn:service-1:tenant-id-1:read
-
urn:service-1:tenant-id-2:read
-
urn:service-1:tenant-id-1:write
-
urn:service-1:tenant-id-1:admin
-
urn:service-2:tenant-id-1:read
Questo è molto semplice e potente ma abbiamo il potenziale per il JWT di proliferare in dimensioni quando colleghiamo un utente o un servizio a un numero sempre maggiore di locatari.
Ritengo che il primo approccio sia più standard ma ci obbliga ad aggiungere più complessità al sistema poiché dobbiamo gestire la registrazione dei client e guidare l'utente attraverso il flusso della delega di autenticazione ogni volta che si desidera concedere a un server l'accesso a un cliente che possiedono. Il secondo approccio è semplice, ma tecnicamente meno conforme agli standard.
Abbiamo valutato API di autorizzazione (basato su UMA ) per questo, ma non è adatto al momento in quanto vi sono numerosi problemi irrisolti su KeyCloak che hanno da affrontare.
Che cosa tendono a fare le persone nel mondo reale per affrontare questo problema? Il nostro sistema ha un numero illimitato di inquilini, ma realisticamente ogni utente sarà associato a poche decine al massimo. Le applicazioni di terze parti (che sono tutti client dinamici) saranno potenzialmente associate a centinaia o migliaia di altri client.