Al momento disponiamo di una piattaforma con un'architettura SOA in cui l'identità dell'utente viene propagata dall'applicazione web tramite servizi di livello intermedio (REST e SOAP) fino a quando non si interroga effettivamente il livello di archiviazione dei dati.
Usiamo l'identità dell'utente per applicare il controllo di accesso a livello di entità. L'identità dell'utente viene comunicata tra i servizi associando i token di sicurezza alle chiamate di servizio (SAML / JWT).
Uno dei nostri clienti desidera utilizzare una Event Driven Architecture per creare un prodotto sulla nostra piattaforma anziché modello di richiesta / risposta più tradizionale. Vogliono utilizzare il Azure Service Bus Code e argomenti per ottenere una scalabilità più elevata.
Mi chiedevo come in questa architettura potessimo propagare l'identità dell'utente ai consumatori dei messaggi / eventi memorizzati sul bus di servizio.
PER ESEMPIO:
Supponiamo che l'utente crei una nuova attività nell'applicazione Web front-end. Invece di chiamare il servizio Attività (che invia l'identità dell'utente) e attendere la risposta, l'applicazione memorizza l'evento di creazione dell'attività nella coda e delega la creazione effettiva dell'attività a un lavoratore in background iscritto a questo tipo di messaggio.
Tuttavia, per determinare se l'utente che ha avviato la creazione dell'attività è autorizzato a creare un'attività, il servizio attività (un operatore in background) deve chiamare il livello entità nel contesto dell'utente.
Potrei memorizzare il token di sicurezza insieme al carico utile per la creazione dell'attività, ma dato il disaccoppiamento temporale tra produttore e consumatore, questo token potrebbe essere scaduto dal momento in cui è usato per chiamare nel livello entità.
Esistono schemi ben definiti per risolvere questo problema? Mi rendo conto che posso spostare il controllo degli accessi nell'applicazione web, ma dato che abbiamo creato una piattaforma su cui gli altri possono creare applicazioni, non voglio necessariamente fidarmi di quelle applicazioni per far rispettare i requisiti di sicurezza. Questo è il motivo principale per cui abbiamo creato il controllo accessi nel livello entità.
Tutti i consumatori di eventi del bus di servizio fanno sempre parte di un sottosistema fidato, o ci sono modi per risolverlo elegantemente?