6

Das ist mein Frühling Stiefel 1.5.1 Antrieb ist application.properties:Frühlings-Boot-Actuator Endpoints Sicherheit funktioniert nicht mit benutzerdefinierten Spring Security Configuration

#Spring Boot Actuator 
management.contextPath: /actuator 
management.security.roles=R_0 

Das ist mein WebSecurityConfig:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Value("${logout.success.url}") 
    private String logoutSuccessUrl; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     // @formatter:off 
     http.addFilterBefore(new CorsFilter(), ChannelProcessingFilter.class); 

     http 
      .csrf().ignoringAntMatchers("/v1.0/**", "/logout") 
     .and() 
      .authorizeRequests() 

      .antMatchers("/oauth/authorize").authenticated() 
      //Anyone can access the urls 
      .antMatchers("/signin/**").permitAll() 
      .antMatchers("/v1.0/**").permitAll() 
      .antMatchers("/auth/**").permitAll() 
      .antMatchers("/actuator/health").permitAll() 
      .antMatchers("/actuator/**").hasAuthority("R_0") 
      .antMatchers("/login").permitAll() 
      .anyRequest().authenticated() 
     .and() 
      .formLogin() 
       .loginPage("/login") 
       .loginProcessingUrl("/login") 
       .failureUrl("/login?error=true") 
       .usernameParameter("username") 
       .passwordParameter("password") 
       .permitAll() 
      .and() 
       .logout() 
        .logoutUrl("/logout") 
        .logoutSuccessUrl(logoutSuccessUrl) 
        .permitAll(); 
     // @formatter:on 
    } 

    /** 
    * Configures the authentication manager bean which processes authentication requests. 
    */ 
    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder()); 
    } 

    @Override 
    @Bean 
    public AuthenticationManager authenticationManagerBean() throws Exception { 
     return super.authenticationManagerBean(); 
    } 

} 

ich jetzt bin erfolgreich in der Lage, mich in meiner Anwendung mit einem richtigen Benutzer anmelden, die R_0 Berechtigungen hat, aber wenn ich versuche, zum Beispiel auf

zuzugreifen

Ich erhalte folgende Fehlermeldung:

There was an unexpected error (type=Forbidden, status=403). 
Access is denied. User must have one of the these roles: R_0 

Wie Sie sich richtig Frühling Boot-Aktor, um sich bewusst zu sein, über die richtige Authentication konfigurieren?

Gerade jetzt, um es zu bekommen Workin ich die folgenden Trick zu tun haben:

management.security.enabled=false 

.antMatchers("/actuator/health").permitAll() 
.antMatchers("/actuator/**").hasAuthority("R_0") 

irgendeine Chance Actuator in einem richtigen Weg zu konfigurieren?

AKTUALISIERT

Ich verwende UserDetailsService.UserDetails.Authorities

public Collection<? extends GrantedAuthority> getAuthorities() { 
     String[] authorities = permissions.stream().map(p -> { 
      return p.getName(); 
     }).toArray(String[]::new); 
     return AuthorityUtils.createAuthorityList(authorities); 
    } 
+1

Dank dieses Problem zu lösen, aber ich bin in der Lage, dies zu verwalten mit '.antMatchers ("/Aktor/* * "). hasAuthority (" R_0 ")'. Das Problem ist, dass ich nicht in der Lage bin, die standardmäßige Spring Boot Actuator-Sicherheitsintegration zu verwenden, ohne dass eine benutzerdefinierte Konfiguration wie diese erstellt werden muss. – alexanoid

+0

Ich habe das gleiche Problem. Beachten Sie, dass durch Setzen eines 'UserDetailsService' auf' AuthenticationManagerBuilder' die Standard-Sicherheitskonfiguration überschrieben wird, was bedeutet, dass eine explizite URI-Zugriffskonfiguration erforderlich ist, wie Sie es über die 'HttpSecurity'-Klasse getan haben. Haben Sie es geschafft, dass es so funktioniert, wie Sie es ursprünglich erwartet hatten? – RZet

+0

Ja, müssen Sie Präfix 'ROLE_' für Ihre' management.security.roles' zum Beispiel verwenden 'management.security.roles = ROLE_SOMENAME' – alexanoid

Antwort

3

Sie haben Präfix ROLE_ für Ihre management.security.roles zum Beispiel verwenden management.security.roles=ROLE_SOMENAME um

+0

Ich dachte in Spring Boot 1.5.1 die Werte der 'management.security.roles' Eigenschaft sollte nicht mit' ROLE_' vorangestellt werden. Ich habe viel Verwirrung in Bezug auf dieses Thema gefunden. Ich glaube, dass Ihr Problem auch behoben werden konnte, indem Sie die folgenden 'HttpSecurity' Einstellungen' .antMatchers ("/ actuator/**"). HasAuthority ("ROLE_R_0") 'stattdessen ändern. – RZet

+0

antMatcher löst das Problem nicht. Zum Beispiel gibt Aktuator/Gesundheitsendpunkt unterschiedliche Daten für autorisierte und nicht autorisierte Benutzer zurück. Es ist nicht möglich, basierend auf der bereitgestellten antMatcher-Konfiguration zu implementieren – alexanoid

+0

Das Verhalten, über das Sie sprechen, ist in Abschnitt 48.7 von http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready dokumentiert -monitoring.html. Ihre ursprüngliche Frage lautete ca. 403 Statuscode für '/ actuator/bohnen' call. Ich glaube, dass es behoben werden kann, indem man beide 'antMatchers ("/actuator ... ") Einstellungen löscht und sicherstellt, dass' UserDetailsService' ein 'UserDetails'-Objekt zurückgibt, das' GrantedAuthority' enthält und in deinem Fall auf 'ROLE_R_0' gesetzt ist. Alternativ können Sie es mit 'InMemoryUserDetailsManagerConfigurer' kombinieren, wie ich im Kommentar zur Hauptfrage erwähnt habe. – RZet

-1

Nach diesem Link:

http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html

By default all sensitive HTTP endpoints are secured such that only users that have an ACTUATOR role may access them. Security is enforced using the standard HttpServletRequest.isUserInRole method.

Use the management.security.roles property if you want something different to ACTUATOR.

Also ich denke, alles, was Sie tun müssen, wird der fol Eigenschaft in application.properties.

management.security.roles 

Ex:

management.security.roles=R_0 
+0

Danke, aber bitte werfen Sie einen Blick auf meine Frage. Ich habe bereits 'management.security.roles = R_0' zur Verfügung gestellt. Das Problem ist, dass Spring Boot Actuator aus irgendeinem Grund nicht versteht, wie man mit einer aktuellen Spring Security arbeitet. – alexanoid

Verwandte Themen