Sto costruendo un'architettura di microservizi in cui fondamentalmente ogni servizio rappresenta una risorsa e ogni azione su quelle risorse è accessibile e controllata da un UserToken
(JWT) generato da un servizio di autenticazione / autorizzazione per quanto riguarda autorizzazioni e ruoli.
Il UserToken
può essere trasportato in modo asincrono o in modo sincrono dal gateway a un servizio a un altro, e ogni servizio controlla il token in base ai suoi requisiti di sicurezza.
Funziona perfettamente bene.
Ho un caso d'uso in cui un servizio (1) potrebbe potenzialmente inviare una transazione a un altro servizio (2) senza essere avviato da un utente ma dallo stesso servizio (1) (scheduler per esempio).
La mia domanda riguarda la distinzione tra una transazione inviata da un utente che può essere verificata utilizzando un token e una transazione inviata dal sistema che non ha token.
In questo momento, il punto di ingresso è o un argomento di Kafka (utente del messaggio) o un API REST ed entrambi richiedono un token ( X extends Token
).
Inizialmente, stavo pensando di creare un token speciale ( ServiceToken
) che contenga una chiave API utilizzata per autorizzare un servizio a un altro, ma non so se è l'approccio giusto. Cosa succede se la chiave viene divulgata, ecc.
Grazie.
Stack di tecnologia:
- Java8
- Primavera-Boot
- Gateway GraphQL
- Messaggi di Kafka
- Servizio di autenticazione / autorizzazione personalizzato