2017-04-20 4 views
1

Ich möchte meine Vaadin-Anwendung mit Keycloak und Feder Sicherheit zu sichern. Ich versuche den "keycloak-spring-security-adapter" zu verwenden. Mein Problem ist, dass ich auch nicht authentifizierte Benutzer meine Anwendung verwenden möchte, aber mit weniger Funktionalität - ich mache dies mit Methode Sicherheit und überprüfen, welche Rollen der aktuelle Benutzer in der Benutzeroberfläche hat.Keycloak mit Vaadin und Feder Sicherheit

Kann ich den Filter so konfigurieren, dass er nicht authentifizierte Anfragen ignoriert, aber wenn das Token vorhanden ist, verwendet es?

Dank

Daniel

+0

Könnten Sie ein Beispiel von dem, was Sie in Ihren Methoden und UI haben? Ich benutze nicht Vaadin, aber AFAIK wird alles mit Java gemacht (keine XML-basierten Strukturen für Views), oder? –

+0

Ja, es ist alles in Java. Es gibt ein Vaadin-Servlet, das einer URL zugeordnet ist, "Vaadin-Seiten" werden von Ajax an den Browser gesendet. – dve

+0

Dann können Sie die Standardmethode für den Zugriff auf Rollen mit Federsicherheit verwenden und Ihre Ansichtsgenerierungscodeteile in Bedingungen umwandeln, um das zu rendern abhängig davon, welche Art von Zugriff der Benutzer hat. –

Antwort

1

Ein Arbeitsbeispiel, was wollen Sie in der public-access branch of this github project gefunden werden kann. Es verwendet jedoch Vaadin 8.

Im Wesentlichen können Sie Setup Ihre Anwendung teilweise öffentlich sein, dh zugreifbar nicht authentifizierte Benutzer für bestimmte Teile und erfordert Login für andere, wie folgt:

@Configuration 
@EnableWebSecurity 
@EnableVaadinSharedSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true) 
public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter { 
... 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http.httpBasic().disable(); 
    http.formLogin().disable(); 
    http.csrf().disable(); 
    http 
     .authorizeRequests() 
     .antMatchers("/vaadinServlet/UIDL/**").permitAll() 
     .antMatchers("/vaadinServlet/HEARTBEAT/**").permitAll() 
     .anyRequest().permitAll(); 
    http 
     .logout() 
     .addLogoutHandler(keycloakLogoutHandler()) 
     .logoutUrl("/sso/logout").permitAll() 
     .logoutSuccessUrl("/"); 
    http 
     .addFilterBefore(keycloakPreAuthActionsFilter(), LogoutFilter.class) 
     .addFilterBefore(keycloakAuthenticationProcessingFilter(), BasicAuthenticationFilter.class); 
    http 
     .exceptionHandling() 
     .authenticationEntryPoint(authenticationEntryPoint()); 
    http 
     .sessionManagement() 
     .sessionAuthenticationStrategy(sessionAuthenticationStrategy()); 
    } 
... 
} 

Die Linie http.anyRequest().permitAll(); ist das wichtigste, wo Sie Konfigurieren Sie den Filter, um alle Anfragen zuzulassen. Sie könnten dies weiterhin so anpassen, dass nur bestimmte URLs öffentlich zugänglich sind.

Sie können dann Spring-Sicherheitsanmerkungen für Methoden/Ansichten/Komponenten verwenden, um Ihre feingranulare Zugriffskontrolle zu konfigurieren. Z. B:

@SpringComponent 
@Secured("ROLE_ANONYMOUS") 
public class LoginOperation implements Runnable { 
    @Override 
    public void run() { 
    // login logic 
    } 
} 

und

@Secured("ROLE_USER") 
public class LogoutOperation implements Runnable {  
    @Override 
    public void run() { 
    // logout logic 
    } 
} 
Verwandte Themen