- Gateway si sedeva di fronte a molti servizi
Qual è la preoccupazione qui?
- alcuni servizi possono esporre gli endpoint che non richiedono l'autenticazione
Primavera di sicurezza ha una regola permitAll()
accesso
- alcuni servizi possono esporre gli endpoint che hanno bisogno di una sessione Id e alcuni con un token ", un valore opaco arbitrario (per Esempio di download di un file se si conosce un URL "difficile da indovinare" Nel gateway API/Spring Security è possibile configurare tutti gli endpoint con i loro specifici requisiti di autenticazione .
Il tuo proxy Zuul può avere sessioni. Se si utilizza Spring Security OAuth 2.0 è possibile utilizzare ResourceServerSecurityConfigurer#stateless(false)
e attivare le sessioni con HttpSecurity#sessionManagement().sessionCreationPolicy(...)
per creare sessioni ogni volta che si riceve un token di accesso valido. Un cookie JSESSIONID verrà inserito nella risposta HTTP.
- come si fa a far rispettare le attuali squadre di servizio per fornire le impostazioni necessarie per il servizio a valle?
Non sono sicuro di aver capito la domanda qui, non ti voglio far rispettare i vincoli di sicurezza a livello di gateway (Zuul proxy) API? o stai cercando di avere "controlli di sicurezza doppia" sia sul proxy che sull'applicazione di destinazione?
- come si fa a permettere impostazioni di autenticazione frequenti cambiamenti del Gateway (come per le esigenze di servizio) senza dover fermare l'intera Gateway?
Zuul consente di aggiungere ZuulRoute
s in modo dinamico in fase di esecuzione, se lo si utilizza come una libreria indipendente che è. Avvolto in Spring Security, il cui contesto è inizializzato una volta al momento dell'avvio ... Dubito che è possibile modificare facilmente la configurazione di sicurezza in fase di runtime.
EDIT seguenti precisazioni da parte della OP nei commenti: Se le squadre dovrebbero essere responsabili delle loro regole di sicurezza, avendo un sistema centralizzato porta è una contraddizione in base alla progettazione.
La mia interpretazione della filosofia del microservizio è che ogni applicazione è autonoma e responsabile del suo ambito funzionale completo e il controllo di sicurezza/accesso è parte di esso. È possibile verificare facilmente i token a livello di applicazione (effettuando una chiamata al server di autorizzazione o utilizzando JWT), con ogni applicazione che definisce quale ambito è richiesto per ciascuna risorsa. Spring Cloud dispone già di uno OAuth 2.0 starter oppure è possibile crearne uno facilmente se si utilizza il boot "semplice" Spring.
In questo modo è possibile distribuire singole app ovunque (cloud pubblico o server locali), senza dover fare affidamento su componenti upstream per la sicurezza o sincronizzare le distribuzioni della configurazione del gateway con altri team.
La cosa gateway API è una tentazione facile, ma non trascurare i rischi ei vincoli:
- non sarà in grado di garantire le chiamate interne
- Si dovrà fare affidamento sulla rete a monte componenti, e prendere in ingresso le applicazioni per scontato
- regole Advanced Access Control può diventare un mal di testa: come si fa a ottenere i permessi individuali dell'utente, ecc
- dovrete sincronizzare le modifiche alla configurazione con le altre squadre
fonte
2015-11-25 17:30:49
Grazie. Ok, quindi Zuul cercherà l'utente e popolerà la Sessione e indirizzerà ai Servizi. I Servizi stessi specificheranno quali endpoint richiedono l'autenticazione e quale tipo di autenticazione. Quindi questa responsabilità siederà con il team di servizio. Questo è buono. Pensavo che potessi liberare i Servizi da questa attività. –
La cosa che mi infastidisce qui è che devi _ ottenere chiamate che attraversano il gateway affinché un'applicazione downstream funzioni. Il gateway non è così stupido, la creazione di sessioni è ancora una logica aziendale. Condividere quella sessione attraverso un datastore è un'accoppiata subdolo, non riesco ancora a capire perché i ragazzi di Spring lo raccomandino in un'architettura di microservizio. –
Hai un suggerimento per una soluzione migliore @MichaelTecourt? Non mi piace nemmeno la replica della sessione come soluzione, ma non ho trovato un modo migliore. –