wake-up-neo.com

Spring Boot 2.0 deaktivieren Sie die Standardsicherheit

Ich möchte Spring Security für die JWT-Authentifizierung verwenden. Aber es kommt mit einer Standardauthentifizierung. Ich versuche, es zu deaktivieren, aber der alte Ansatz, dies zu tun - das Deaktivieren durch application.properties -, ist in 2.0 veraltet.

Das habe ich versucht:

@Configuration
public class StackWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic().disable();
        // http.authorizeRequests().anyRequest().permitAll(); // Also doesn't work.
    }
}

Wie kann ich die grundlegende Sicherheit einfach deaktivieren?

UPDATE
Es könnte schön sein zu wissen, dass ich nicht web mvc, sondern web flux verwende.

Bildschirmfoto:
 Basic login form

15
Jan Wytze

Wenn Spring Security sich im Klassenpfad befindet, fügt Spring Boot nach den neuen Updates in Spring 2.0 @ EnableWebSecurity hinzu. Das Hinzufügen von Einträgen zu application.properties funktioniert jedoch nicht (d. H., Es ist nicht mehr anpassbar). Weitere Informationen finden Sie auf der offiziellen Website Sicherheitsänderungen in Spring Boot 2.0

Obwohl Sie sich bezüglich Ihrer Anforderung nicht sicher sind, könnte ich mir eine Problemumgehung wie die folgende vorstellen:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration  extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests().antMatchers("/").permitAll();
    }
}

Hoffe das hilft.

23
Sen

Das hat für mich funktioniert:

@Configuration
public class SecurityConfig  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests().anyRequest().permitAll();
    }
}
9
davo

Ab Spring Boot 2.1 reicht es nicht mehr aus, nur SecurityAutoconfiguration auszuschließen, wenn Sie Spring-Boot-Aktor einbinden. Sie müssen auch ManagementWebSecurityAutoConfiguration ausschließen, wie folgt:

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
7

Laut der Referenzdokumentation sollte die Sicherheitskonfiguration zum Zulassen aller Anforderungen mit WebFlux folgendermaßen aussehen:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http.authorizeExchange().anyExchange().permitAll();
        return http.build();
    }
}
7
Brian Clozel

Sie können der Application-Klasse Folgendes hinzufügen/ändern:

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
public class MyApplication {

}
6
helmy

Ich denke, Sie suchen nach dem Standardeinstieg für die Authentifizierung, der auf BasicAuthenticationEntryPoint gesetzt ist.

Dieser Eingangspunkt fügt das hinzu 

"WWW-Authenticate": "Basic Realm = ..."

header, der Ihren Browser anweist, Basic Auth zu verwenden.

1
Marvin

Das Problem liegt bei org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter

es hat private ServerAuthenticationEntryPoint authenticationEntryPoint = new HttpBasicServerAuthenticationEntryPoint();

um dies während der ServerHttpSecurity-Initialisierung zu beheben, fügen Sie Folgendes hinzu:

http.exceptionHandling().authenticationEntryPoint(HttpStatusServerEntryPoint(HttpStatus.FORBIDDEN))

Anscheinend verwendet Vanilla (Servlet) spring org.springframework.security.config.annotation.web.configurers.ExceptionHandlingConfigurer # createDefaultEntryPoint

private AuthenticationEntryPoint createDefaultEntryPoint(H http) {
        if (this.defaultEntryPointMappings.isEmpty()) {
            return new Http403ForbiddenEntryPoint();
        }
        if (this.defaultEntryPointMappings.size() == 1) {
            return this.defaultEntryPointMappings.values().iterator().next();
        }
        DelegatingAuthenticationEntryPoint entryPoint = new DelegatingAuthenticationEntryPoint(
                this.defaultEntryPointMappings);
        entryPoint.setDefaultEntryPoint(this.defaultEntryPointMappings.values().iterator()
                .next());
        return entryPoint;
    }

Randnotiz: Veränderbare Felder in Builder-Style-Beans (wie ExceptionTranslationWebFilter) erschweren das Debuggen von Spring-Code (auch zu magische Konfiguration)

0
ichaki5748

In Spring Boot 2 gibt es keine Möglichkeit, die Standardauthentifizierung über die Datei application.properties zu deaktivieren. Aber das einzige, was ist, ist die Verwendung von Anmerkungen

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})

in der Hauptklasse. Es klappt

0
ngochien9x

Wenn ich eine neue Antwort hinzufüge, nehme ich an, dass alle Aktuatoren verwenden. Wenn nicht, würde ich wetten, dass ein Klassenausschluss ausreichen sollte, habe ich es geschafft, durch Eigenschaften zu deaktivieren:

spring:
  autoconfigure:
    exclude: ${spring.autoconfigure.sac}, ${spring.autoconfigure.mwsas}
    sac: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
    mwsas: org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

Ich habe über property auf zwei Auto-Config-Klassen verwiesen, um die Länge beizubehalten (beachten Sie, dass IntelliJ Ultimate weint, wenn Sie so verweisen, da es keine Ahnung hat, was diese Platzhalterwerte sind und ob es sich tatsächlich um legitime Klassen handelt das ärgert dich).

Die Bewerbung kann jedoch nicht wie folgt gestartet werden:

https://www.baeldung.com/spring-boot-security-autoconfiguration

wenn Sie nur SecurityAutoConfiguration deaktivieren

Wenn es funktioniert hat, werden Sie kein automatisch generiertes Passwort mehr sehen und es ist ein bisschen weniger verwirrend als die akzeptierte Antwort, da Entwickler, die das Protokoll lesen, durch das generierte Passwort für die Basisauthentifizierung nicht verwirrt werden, solange die Sicherheit alle zulässt.

Warum das Deaktivieren der AutoConfig-Hauptklasse nicht ausreicht, liegt an diesem Typen:

@Configuration
class ManagementWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .requestMatchers(
                        EndpointRequest.to(HealthEndpoint.class, InfoEndpoint.class))
                .permitAll().anyRequest().authenticated().and().formLogin().and()
                .httpBasic();
    }

}

Es gab Unmengen an Arbeit, um Aktuator und Sicherheitskonfiguration zu trennen, was uns alle verwirrte. Jetzt ist es einfacher, aber es gibt immer noch Artefakte wie diese. Frühlingsentwickler korrigieren mich, wenn ich mich irre :-).

0
Aubergine