【问题标题】:Issue with Authorization (401) with Bearer JWT token using latest OpenAPI / Swagger UI | Spring Boot使用最新的 OpenAPI / Swagger UI 的 Bearer JWT 令牌授权 (401) 问题 |弹簧靴
【发布时间】:2022-12-20 02:21:27
【问题描述】:

我正在从 Swagger 2.9.2 升级到 -> OpenAPI / Springdocs (1.6.9),它是内置的 Swagger UI(版本 4.10.3)。使用以下代码曾是与 Swagger 2 完美配合,允许令牌毫无问题地传递:

OLD SWAGGER 2 配置类:

...
@Configuration
@EnableSwagger2
public class SwaggerConfig {

@Bean
public Docket docket() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.program.programName"))
            .build()
            .globalRequestParameters(defaultParams());
}

private List<RequestParameter> defaultParams() {
    return Collections.singletonList(
            new RequestParameterBuilder()
                    .name("Authorization")
                    .description("auth token")
                    .in(ParameterType.HEADER)
                    .required(true)
                    .build());
  }
}

这是我根据OpenAPI自己的文档添加的新配置类,不幸的是它似乎不起作用。我还将发布我在尝试访问 /swagger-config json 数据时看到的确切错误的屏幕截图:

新配置(不工作):

...    
@Configuration
@ComponentScan(basePackages = {"com.program.programName"})
public class SwaggerConfig {

@Bean
public OpenAPI openAPI() {
    return new OpenAPI()
            .info(new Info()
                    .title("Program API")
                    .description("Application")
                    .version("v0.0.1"))
            .components(new Components()
                    .addSecuritySchemes("bearerAuth",
                            new SecurityScheme()
                                    .type(SecurityScheme.Type.HTTP)
                                    .scheme("bearer")
                                    .bearerFormat("JWT"))
                    .addHeaders("Authorization",
                            new Header()
                                    .description("auth token")
                                    .required(true)));
  }
}

Image of the 401 error trying to get /swagger-config data

正如您在 ^该屏幕截图中所见,我收到此“无法加载远程配置”。主 swagger 页面上的错误。任何帮助,将不胜感激。

【问题讨论】:

    标签: java spring configuration swagger openapi


    【解决方案1】:

    你得到这个是因为它无法访问/v3/api-docs/swagger-config。您应该配置 Spring Security 以允许访问 /v3/api-docs/**

    对于 Webflux,这将是:

    @Configuration
    public class SecurityConfiguration {
        @Bean
        public SecurityWebFilterChain securityWebFilterChain(final ServerHttpSecurity http) {
            http
                .authorizeExchange()
                    .pathMatchers("/actuator/**", "/webjars/swagger-ui/**", "/swagger-ui.html", "/v3/api-docs/**").permitAll()
                    .anyExchange().authenticated()
                    .and()
                .oauth2ResourceServer().jwt();
    
            return http.build();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 2016-12-11
      • 2021-12-31
      • 1970-01-01
      • 2021-12-08
      • 2017-08-22
      • 2017-07-02
      • 2022-10-12
      相关资源
      最近更新 更多