Come si configura un'architettura di micro-servizi in grado di usufruire di un servizio di sicurezza centralizzato comune?

6

Ho ovviamente sentito parlare molto dell'architettura dei Micro-Services e penso che abbia molto senso (specialmente con le storie di successo di Netflix).

Mi piacerebbe implementare una piccola applicazione Grails in Micro-Services (anche se il framework non ha importanza). La mia domanda riguarda il servizio Micro "Sicurezza" o "Utenti". Il mio pensiero iniziale sarebbe quello di creare un'applicazione con un'interfaccia REST in cui gli altri Micro-Servizi interrogheranno l'interfaccia REST del Servizio di sicurezza. Tuttavia, la sicurezza verrebbe duplicata in ogni servizio. Questo sembra un problema inevitabile, ma qual è il modo migliore per gestirlo?

Devo implementare Spring Security in ogni servizio e interrogare un servizio utente con semplici informazioni sui diritti? Oppure un servizio di sicurezza centrale potrebbe funzionare in qualche modo?

    
posta Brandon Wagner 23.11.2014 - 20:32
fonte

2 risposte

3

come dice @ user454322, cerca la specifica OAuth2 ... è uno standard ampiamente utilizzato e ben supportato che funzionerà bene.

Esistono (in modo basico) 2 modi per distribuire un server di autorizzazione:

1) Come proxy inverso (come mostrato nel diagam di @ user454322). Questo è quando tutte le richieste dall'esterno passano attraverso il server OAuth2 e quindi i tuoi servizi. Ciò centralizza il problema dell'autorizzazione, in modo che venga gestito prima che qualsiasi richiesta raggiunga i servizi. Equivale a terminare SSL nel servizio di bilanciamento del carico. In sostanza, il server di autorizzazione diventa parte del middleware di rete, come i firewall e i bilanciatori di carico.

  • lo svantaggio principale è che l'implementazione di un proxy inverso può essere complicato, specialmente se si dispone di payload di grandi dimensioni o se si stanno facendo cose intelligenti con HTTP (HTTP inizia in modo semplice, ma ci sono molte complicate rughe che aggiunge)
  • puoi acquistare soluzioni di "gestione API" che forniscono funzionalità di proxy inverso, ma aggiungi cose come OAuth, metriche, limitazione, ecc.

2) Come server di autorizzazione. Questo è un layout leggermente diverso, in cui ogni servizio accetta le richieste direttamente (dai bilanciatori del carico, ecc.) Ogni richiesta viene fornita con un token di accesso nell'intestazione. Il servizio effettua quindi una chiamata HTTP al servizio di autorizzazione per convalidare il token. Il server di autorizzazione è responsabile dell'autenticazione degli utenti e della concessione di token in primo luogo, i tuoi micro-servizi non devono fare quella parte.

  • lo svantaggio principale è che ogni richiesta in entrata deve effettuare un round trip sul servizio auth. Ciò aumenta la tua latenza.
  • uno svantaggio secondario è che devi assicurarti che ogni dei tuoi servizi chiami il servizio auth - altrimenti, qualsiasi servizio non sarà aperto a Internet e non protetto.
risposta data 27.12.2014 - 17:49
fonte
2

Per evitare duplicazioni e migliorare la manutenibilità, andrei con il servizio di sicurezza centrale .

Si dice che un'immagine dice più di mille parole:


OAuth è il modo comune per proteggere le API RESTful.
Guarda l'articolo di OAuth su Wikipedia].

    
risposta data 27.12.2014 - 17:14
fonte

Leggi altre domande sui tag