Ho una domanda molto interessante che è esplosa in modo proporzionale tra i miei amici ed io. Si tratta di gestire i token emessi dall'utente da una serie di microservizi di autenticazione.
Nota:
- Ogni servizio di autenticazione è supportato dal proprio archivio dati
- Ogni servizio di autenticazione può emettere un token che conosce solo il suo archivio di dati
Ecco un esempio minimale del problema:
Using the Microservices Architecture
We have a Master API Service that delegates all requests to the requested service
We have two Authentication Services that sit behind the Master API Service
Auth Service 'A'
Auth Service 'B'
If 'A' issued an authentication token the User
The token will be stored in a JWT
The JWT will be signed by the unique KEY to service 'A' only
The User makes an authentication request using their issued token
How does the Master API Service know which Auth Service it should validate the
token against?
Approcci a cui abbiamo pensato:
- Approccio A: memorizza alcuni metadati nel reclamo JWT che contiene informazioni utili relative a quale servizio di autorizzazione l'ha emesso.
- Problema: ogni servizio di autenticazione firma il JWT in modo diverso. Questo ci riconduce al problema originale.
- Approccio B: emettere richieste di autenticazione per ogni microservizio di autenticazione e se uno convalida le attestazioni, allora deve contenere il token
- Problema: questo elimina lo scopo dei microservizi
Qualcuno può far luce su questo problema? Forse stiamo solo pensando troppo alla soluzione.