web-dev-qa-db-fra.com

Désactiver l'authentification de base lors de l'utilisation de la configuration Java de Spring Security

J'essaie de sécuriser une application Web à l'aide de la configuration Java de Spring Security.

Voici à quoi ressemble la configuration: -

@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    private String googleClientSecret;

    @Autowired
    private CustomUserService customUserService;

    /*
     * (non-Javadoc)
     * 
     * @see org.springframework.security.config.annotation.web.configuration.
     * WebSecurityConfigurerAdapter
     * #configure(org.springframework.security.config
     * .annotation.web.builders.HttpSecurity)
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        // @formatter:off
        http
            .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/","/static/**", "/resources/**","/resources/public/**").permitAll()
                .anyRequest().authenticated()
            .and()
                .formLogin()
                    .and()
                .httpBasic().disable()
            .requiresChannel().anyRequest().requiresSecure();
        // @formatter:on
        super.configure(http);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        // @formatter:off
        auth
            .eraseCredentials(true)
            .userDetailsService(customUserService);
        // @formatter:on
        super.configure(auth);
    }
}

Notez que j'ai explicitement désactivé l'authentification HTTP Basic en utilisant: -

.httpBasic().disable()

J'obtiens toujours la boîte d'invite d'authentification HTTP tout en accédant à une URL sécurisée. Pourquoi?

S'il vous plaît, aidez-moi à résoudre ce problème ... Je veux juste afficher le formulaire de connexion par défaut fourni.

Version de démarrage pour Spring Boot: 1.1.5 Version de sécurité pour Spring: 3.2.5

Merci

10
Kumar Sambhav

Tout d’abord, appeler super.configure(http); remplacera l’ensemble de votre configuration antérieure. 

Essayez ceci à la place:

http
    .authorizeRequests()
        .anyRequest().authenticated()
        .and()
    .formLogin()
        .and()
    .httpBasic().disable();
19
kazuar

Si vous utilisez Spring Boot, la documentation indique:

Pour désactiver complètement la configuration par défaut du démarrage sur un site Web application, vous pouvez ajouter un bean avec @EnableWebSecurity

Donc, si vous voulez vous personnaliser complètement, cela pourrait être une option.

Juste pour que ce soit clair… Il vous suffit de mettre l'annotation @EnableWebSecurity sur votre classe d'application principale ou votre classe de configuration d'application.

6
Marcel Overdijk

Vous pouvez désactiver le formulaire d'inscription via l'instance HttpSecurity comme suit:

http.authorizeRequests().antMatchers("/public/**").permitAll()
        .antMatchers("/api/**").hasRole("USER")
        .anyRequest().authenticated() 
        .and().formLogin().disable();

Cela entraînera la réception d'une erreur 403 Http lors de la tentative d'accès à une ressource sécurisée.

4
Moustafa Essa

option anonyme a fonctionné pour moi

http.csrf (). disable (). headers (). frameOptions (). sameOrigin (). and (). authorizeRequests (). anyRequest (). anonymous (). et (). httpBasic (). disable ();

1
vara