繁体   English   中英

使用最新的 OpenAPI / Swagger UI 的 Bearer JWT 令牌授权 (401) 问题 | 弹簧靴

[英]Issue with Authorization (401) with Bearer JWT token using latest OpenAPI / Swagger UI | Spring Boot

我正在从 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)));
  }
}

尝试获取 /swagger-config 数据时出现 401 错误的图片

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

你得到这个是因为它无法访问/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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM