Stiamo pianificando di utilizzare OAuth2 / OpenID-connect per l'autenticazione & Autorizzazione e sto guardando quali servizi sarebbero necessari. Finora ho identificato che ho bisogno di un minimo:
- Un servizio di autorizzazione OpenID-connect, ad es. implementato utilizzando Identity Server
- Servizi per la registrazione e la gestione degli utenti
- Servizio / i per la registrazione e la gestione delle applicazioni client
(La mia ipotesi qui è che sto meglio avendo questi come servizi separati piuttosto che raggruppare tutti questi in una sorta di mini-monolite di autenticazione)
Durante la manutenzione delle richieste di autenticazione, Identity Server dovrà cercare l'id del client e potrebbe anche aver bisogno di cercare i dettagli dell'utente. Per me, sembra che la soluzione più semplice sia una richiesta REST / HTTP, ad es. qualcosa di simile (dove la password è contenuta nel corpo)
POST https://users.api/users/justinp/authenticate
Mi sembra anche che voglio che le richieste a questa API vengano autenticate, tuttavia, crea una sorta di dipendenza circolare in base alla quale il servizio di autorizzazione dipende dal servizio utente per soddisfare le richieste, ma il servizio utente (e allo stesso modo il client servizio app) dipendono dal servizio di autorizzazione per l'autorizzazione. Ciò non causa problemi in fase di esecuzione poiché il server delle autorizzazioni può, naturalmente, generare i propri token di autorizzazione validi , ma il design non sembra ancora "abbastanza appropriato".
Riesco a vedere come potrei evitarlo in vari modi, ad es. utilizzando CQRS / Event Sourcing - fare in modo che i servizi delle app degli utenti e dei client spostino le modifiche in modo che il servizio di autorizzazione possa mantenere il proprio elenco interno di utenti e client, tuttavia questa complessità aumenta e non sono del tutto sicuro che sia necessario.
In questo caso, questa "dipendenza circolare" è davvero soddisfacente, oppure questa architettura è un po 'fastidiosa?