5

Sto modificando il campione oauth2-vanilla da Springs excellent security tutorials. L'oauth2-vanilla combina Zuul Proxy e l'interfaccia utente in un'unica applicazione. Vorrei separare Zuul Proxy e l'interfaccia utente. (Il Proxy Zuul dovrebbe fungere da gateway API e proxy inverso per diverse UI).Spring Security Oauth2 SSO con Zuul Proxy

Quando si accede all'interfaccia utente tramite il proxy zuul, dovrebbe essere in grado di eseguire SSO basato su Oauth2 tra l'interfaccia utente e il backend della risorsa.

L'OAuth2-vanilla si presenta così

dove voglio passare a qualcosa di simile:

ho rimosso la parte di interfaccia utente dal gateway, e ha aggiunto una rotta zuul per l'interfaccia utente

zuul: routes: resource: url: http://localhost:9000 user: url: http://localhost:9999/uaa/user ui: url: http://localhost:8080

Ho creato una nuova webapp UI contenente l'interfaccia utente (elementi angolari) con un'annotazione @EnableOAuth2Sso.

Quindi accedo all'interfaccia utente tramite http://localhost:8888 (tramite il proxy zuul). Dopo l'autenticazione e l'esecuzione attraverso il flusso dell'interfaccia utente, posso accedere all'endpoint/utente che mi restituisce l'utente. (Durante il debug, ho una sessione HTTP con OAuth2Authentication.

Quando accedo all'endpoint/resource, tuttavia, HttpSessionSecurityContextRepository non riesce a trovare una sessione e non è in grado di creare un contesto con l'OAuth2Authentication.

ho creato a git repository con il campione modificato.

sto indovinando c'è qualcosa di sbagliato con la configurazione del gateway. ho provato a cambiare i percorsi dei cookie, cambiare le regole HttpSecurity nel proxy ma non riesco a farlo funzionare

Quello che non capisco è il motivo per cui l'interfaccia utente, quando si accede tramite il proxy è in grado di risolvere l'endpoint /user (con una sessione HTTP e un'autenticazione OAuth2), ma non è in grado di accedere all'endpoint /resource.

Inoltre, poiché l'interfaccia utente è ora in esecuzione nel contesto /ui, sembra che sia necessario il seguente codice nel gateway per caricare i file angolari css/js.

.antMatchers("/ui/index.html", "/ui/home.html", "ui/css/**", "/ui/js/**").permitAll().anyRequest().authenticated();

Inoltre non mi sembra giusto che ho bisogno di prefisso con il percorso ui Zuul.

Qualsiasi aiuto sarebbe apprezzato.

+0

Perché l'interfaccia utente è '@ EnableOAUth2Sso'?Avrei pensato che fosse più naturale (dato che hai già quell'annotazione sul gateway) per trattarlo come un server di risorse ('@ EnableResourceServer'). Penso che sia la conclusione a cui siamo arrivati ​​anche noi. –

+0

Riguardo a "/ resource": Il problema può essere che non si include "spring-cloud-starter-security". Che, come ho capito, esegue la corrispondenza effettiva tra sessione e token di accesso e inoltra il token di accesso in base all'ID delle sessioni del browser. So che ho avuto questo problema prima. – Filip

+0

Penso che il gateway (zuul) faccia la corrispondenza. Sulla base del sessonId che il browser invia attraverso il cookie, il gateway può trovare il corrispondente token di accesso che passa sulla risorsa. – ddewaele

risposta

0

Non sono mai riuscito a far funzionare @EnableOauthSso. Invece, ho annotato come @EnableResourceServer e ho creato una configurazione di sicurezza per Zuul.

@Configuration 
@EnableResourceServer 
public class JwtSecurityConfig extends ResourceServerConfigurerAdapter { 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests() 
      .antMatchers("/oauth/**").permitAll() 
      .antMatchers("/**").hasAuthority("ROLE_API") 
      .and() 
      .csrf().disable(); 
    } 
} 
Problemi correlati