Разрешить анонимный доступ к springdoc-openapi-ui с помощью Spring Security

Как разрешить анонимный доступ к springdoc-openapi-ui (OpenAPI 3.0 /swagger-ui.html) в Приложение Spring Boot, защищенное Spring Security?


person Evgeniy Khyst    schedule 24.01.2020    source источник


Ответы (3)


Чтобы использовать springdoc-openapi-ui /swagger-ui.html, разрешите анонимный доступ к следующим конечным точкам в _ 2_ с использованием метода permitAll:

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

Пример:

@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()
  }
}

Убедитесь, что у проекта есть следующие зависимости:

person Evgeniy Khyst    schedule 24.01.2020

В дополнение к ответу Евгения я бы добавил правильную конфигурацию, чтобы избежать конфликтов с извлечением документов, используемым в пользовательском интерфейсе Swagger (например, js, html, изображения и другие файлы), а также в классе SecurityConfig, например:

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

Без этой конфигурации, даже если пользовательский интерфейс выглядит так, как будто он загружен, в фоновых вызовах может возникнуть 401: Unauthorized при загрузке вышеупомянутых файлов.

person batero    schedule 10.09.2020

Для получения доступа в spring webflux вам необходимо сделать следующее, протестированное с помощью spring -doc версии 1.5.2:

Веб-страница swagger не работала на html-ресурсах с путем /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();
  }
}
person jkamcc    schedule 23.12.2020