Sto lavorando allo sviluppo di un'API REST che verrà utilizzata dai clienti di prima parte che sviluppiamo e dai clienti di terze parti in futuro. I client di prima parte includono un'applicazione lato client SPA e programmi eseguiti su PC client (non possono garantire la sicurezza dei segreti).
Inoltre, questa API è pseudo-multi-tenant. Disponiamo di più titolari e ciascun titolare può avere una o più istanze attive nell'API, ciascuna con il proprio set di ruoli di sicurezza, ognuno con autorizzazioni diverse. Tutti questi dati tuttavia sono archiviati nello stesso database e vogliamo consentire agli utenti di cambiare l'istanza su cui stanno lavorando (sia in-tenant che out-of-tenant). Accedi È possibile utilizzare servizi di terze parti (Facebook / Google / ecc.). Inoltre, il loro accesso dovrebbe consentire loro di accedere alle altre istanze senza eseguire nuovamente l'autenticazione.
Mi sto un po 'confondendo su come dovrei implementare la logica di autenticazione / autorizzazione data la natura multi-tenant / multi-ruoli dell'API. Quello che sto pensando è il percorso giusto per implementare l'autenticazione OpenID Connect per l'API e quindi OAuth per delegare l'accesso alle istanze specifiche che l'utente sta tentando di eseguire. La mia confusione entra in gioco quando cerco di determinare quali token dovrebbero essere in uso dove. Vogliamo che i nostri utenti abbiano la possibilità di rimanere connessi alla SPA e comunque modificare la loro istanza.
Ho visto informazioni sulla protezione di API REST multitenant / multidatabase, ma i ruoli sembrano essere coerenti, quindi non posso estrapolare la gestione a un database con vari ruoli.
Quindi queste sono le mie domande:
- È corretto utilizzare OpenID Connect e OAuth2 in base a queste informazioni?
- Sembra che OpenID Connect consenta di pubblicizzare gli ambiti che desideri delegare. Come sarebbe gestito questo con ruoli indeterminati fino a dopo l'autenticazione e quando il loro inquilino è noto?
- È corretto delegare le singole autorizzazioni tramite OAuth (cosa voglio fare) oppure OAuth dovrebbe delegare i ruoli assegnati per istanza e l'applicazione deve quindi cercare le autorizzazioni?
- Dovrebbero esserci due token separati, uno per l'autenticazione generale e uno per l'autorizzazione per istanza? Quale sarebbe lo standard per passare questi all'API. Attualmente stiamo usando JWT e un'intestazione di Authorization Bearer. Mi piace la semplicità di un token, ma se questo deve essere modificato, modificato, possiamo farlo.
Ho cercato articoli per la settimana scorsa o due su questo argomento, ma non ho trovato nulla che possa aiutare a chiarire quale tipo di flusso sarebbe il migliore per la mia situazione e come gestisco la variabilità da istanza ad istanza. Se pensi di aver perso un articolo, per favore sentiti libero di aggiungerlo a questo come commento e lo esaminerò anch'io.