Attualmente stiamo lavorando su un sistema basato su micro-servizi. L'idea alla base è dividere il nostro sistema monolitico in piccoli domini (micro-servizio per dominio).
Tutti i servizi saranno utilizzati dalle nostre applicazioni interne, ma abbiamo intenzione di esporlo a pubblico.
Uno dei servizi sarebbe il servizio di gestione delle identità, che sarebbe responsabile per l'emissione e la convalida dei token.
Per i riferimenti condivisi, stiamo usando SharedKernel. Una delle librerie nel kernel condiviso è un AuthorizationAttribute
personalizzato, che verrà utilizzato da tutti i micro-servizi. In pratica, ciò che fa l'attributo è l'inoltro del token Bearer al servizio di autorizzazione e il servizio di autorizzazione risponde con informazioni quali la validità del token, le informazioni utente e un set di endpoint / risorse consentiti per il token indicato.
Se l'endpoint corrente non è elencato, viene restituita la risposta HTTP 401.
Ora ho 2 dubbi:
- Siamo sulla strada giusta e questo è un approccio valido? In caso contrario, cosa si può fare per migliorarlo?
- Abbiamo ancora problemi con il concetto UserTypes / Roles. Probabilmente avremo 3 tipi di utenti. Amministratori, agenti e utenti finali e ancora una volta, se alcune società terze parti decidono di utilizzare la nostra API, i ruoli creati per le nostre esigenze potrebbero non essere adatti alle loro esigenze.
Il problema è che non tutti gli agenti avranno impostato le stesse autorizzazioni. Ad esempio potremmo avere un agente che è responsabile della contabilità e che avrebbe accesso solo ai micro-servizi relativi alla contabilità, ma potremmo anche avere un agente che è responsabile solo per la prenotazione. Se questo dovesse richiederci di impostare un UserType per ogni tipo di agente, f. AccountingAgent, BookingAgent ecc. E assegnare più
UserTypes
all'utente, oppure esiste un approccio più semplice per risolvere questo problema?