簡體   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