Comment autoriser l'accès anonyme à springdoc-openapi-ui (OpenAPI 3.0 /swagger-ui.html) dans une application Spring Boot sécurisée par Spring Security ?

6
Evgeniy Khyst 24 janv. 2020 à 17:27

3 réponses

Meilleure réponse

Pour utiliser springdoc-openapi-ui /swagger-ui.html, autorisez l'accès anonyme aux points de terminaison suivants dans le WebSecurityConfigurerAdapter en utilisant la méthode permitAll :

  • /v3/api-docs/**
  • /swagger-ui/**
  • /swagger-ui.html

Exemple:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  public void configure(HttpSecurity http) throws Exception {
    http.
        .authorizeRequests()
        .antMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
        .anyRequest().authenticated()
        .and()
        .httpBasic(); //or anything else, e.g. .oauth2ResourceServer().jwt()
  }
}

Assurez-vous qu'un projet a les dépendances suivantes :

10
Evgeniy Khyst 24 janv. 2020 à 14:40

Pour obtenir l'accès à spring webflux, vous devez procéder comme suit, testé avec spring-doc version 1.5.2 :

La page Web swagger échouait sur les ressources html avec le chemin /webjars/swagger-ui.

@Configuration
@EnableWebFluxSecurity
public class WebSecurityConfig {

  @Bean
  SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    return http.
        .authorizeExchange()
        .pathMatchers(
            "/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html", "/webjars/swagger-ui/**")
        .permitAll()
        .anyExchange()
        .authenticated()
        .and()
        .build();
  }
}
0
jkamcc 23 déc. 2020 à 15:57

En plus de la réponse d'Evgeniy, j'ajouterais la configuration appropriée pour éviter les conflits avec la récupération de documents utilisée dans l'interface utilisateur de Swagger (tels que js, html, images et autres fichiers), également dans la classe SecurityConfig comme ceci :

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   //Other configuration methods
   
   @Override
   public void configure(WebSecurity web) {
    web.ignoring()
    .antMatchers("/v3/api-docs/**", "/swagger-ui/**");
   }
}

Sans cette configuration, même si l'interface utilisateur semble chargée, un 401: Unauthorized peut survenir lors des appels en arrière-plan lors du chargement des fichiers mentionnés ci-dessus.

0
batero 10 sept. 2020 à 15:27