L'autenticazione + l'autorizzazione è una buona idea a livello di gateway quando si utilizzano i microservizi?

3

Ho questo semplice design:

                   ---------               -------------
----> Queries ----> Gateway ---- RPC ----> Microservices
                   ---------               -------------

Penso che il gateway gestisca l'autenticazione e l'autorizzazione lasciando i miei microservizi a fidarsi completamente del gateway (ovvero se il gateway dice che l'utente x deve essere eliminato, non ricontrollare il token di autenticazione, fallo semplicemente). I microservizi non saranno esposti al mondo e stabiliranno una connessione sicura (VPN forse) al Gateway.

Questa è una buona idea? O dovrei prendere la soluzione più snella e controllare il token di autenticazione con ogni richiesta sia sul gateway che sul microsevice? Cosa può andare storto?

    
posta Valentin Radu 18.01.2018 - 20:29
fonte

2 risposte

4

Come vengono bloccati i microservizi?

Se un utente malintenzionato è interno o trova un punto debole all'interno della tua organizzazione e attacca i tuoi microservizi, vengono completamente separati in modo tale che solo le richieste arrivano attraverso il gateway?

Qualcuna delle tue microservizi esegue azioni che sono considerate più private del resto? Esempi di servizi diversi generano il contenuto della pagina mentre altri pagamenti vengono elaborati?

La mia vista è che dovresti passare un token di autenticazione a tutti i tuoi servizi dopo l'autenticazione al tuo gateway, ma questo dipende dal tuo modello di minaccia di sistema.

    
risposta data 18.01.2018 - 20:48
fonte
2

Non è necessariamente una cattiva idea, ma credo che sia un po 'complicato. Dalle informazioni che ci hai fornito, non capisco assolutamente la necessità del gateway.

Prima di tutto, presumo che tu abbia un servizio / server separato che agisce come un server di autenticazione, consumando credenziali utente e gettando fuori (diciamo) token JWT firmati che garantiscono il ruolo e l'autenticità di ciascun utente. Quindi, quando il client desidera accedere all'esecuzione di una query su uno dei micro-servizi, può recuperare un token JWT dal server di autenticazione se non ne ha già uno, quindi passare questo token JWT nell'intestazione di autenticazione in una richiesta direttamente a il micro-servizio.

Il micro-servizio può quindi verificare la firma sul token JWT con lo stesso algoritmo utilizzato per firmarlo (ad esempio l'algoritmo HMAC-SHA256). Se la firma è valida, il micro-servizio controlla il ruolo fornito nel token JWT e soddisfa la richiesta o la rifiuta.

Il problema con il tuo metodo è la possibilità di aggirare il gateway e inoltrare richieste direttamente al micro-servizio. Ad esempio:

                   ---------               -------------
----> Queries ----> Gateway ---- RPC ----> Microservices
                   ---------               -------------
                                              ^
                                              |
----> Attacker Query -------------------------

Dove l'attaccante non trasmette token JWT e il micro-servizio soddisferà comunque la richiesta.

L'unica buona ragione per usare un gateway come hai spiegato è se non c'è modo per la persona che forma la query di sapere dove risiede questo microservizio e / devono usare il gateway per indirizzare la loro query al micro- servizio. In tal caso, a meno che tu non possa assolutamente garantire che nessuna richiesta, ad eccezione delle richieste provenienti dal gateway, possa raggiungere i micro-servizi, dovrai controllare i token sia sui micro-servizi che sul gateway.

Spero che ti aiuti!

    
risposta data 18.01.2018 - 22:01
fonte