Spring 启动、Swagger 和授权

Spring Boot, Swagger and Authorisation

我有一个使用 Springdoc (Swagger) 的 Spring 引导程序 API。 API 具有在 header 中传递的“apiKey”和“代码”字段的安全性。我很难正确配置 Swagger 以在 Swagger UI 中启用身份验证功能。这是配置:

@Bean
public OpenAPI alartaCoreAdtAPI() {
    return new OpenAPI()
            .addSecurityItem(new SecurityRequirement().addList("BASIC"))
            .components(
               new Components()
                   .addSecuritySchemes("BASIC",
                       new SecurityScheme()
                           .type(SecurityScheme.Type.HTTP)
                           .scheme("basic")
                           .name("code")
                                            
                   )
            )               

              .info(new Info().title(config.getApiTitle())
              .description(config.getApiDescription())
              .version(config.getApiVersion())
              .license(new 
             License().name(config.getApiLicenseTitle()).url(config.getApiLicenseUrl())))
);
  } 

我知道这是不正确的,但不确定如何配置它。

感谢任何帮助。

解决方案尝试: 来自@indybee 的推荐:

@Bean
    public OpenAPI alartaCoreAdtAPI() {
        return new OpenAPI()
                
                .addSecurityItem(new SecurityRequirement().addList("BASIC"))
                  
                .components( new Components()
                        .addSecuritySchemes("apiKey", securityScheme("apiKey"))
                        .addSecuritySchemes("code", securityScheme("code"))
                        )

                  .info(new Info().title(config.getApiTitle())
                  .description(config.getApiDescription())
                  .version(config.getApiVersion())
                  .license(new License().name(config.getApiLicenseTitle()).url(config.getApiLicenseUrl())))
                  );
      } 
    
    private SecurityScheme securityScheme(String name) {
        return new io.swagger.v3.oas.models.security.SecurityScheme()
            .type(io.swagger.v3.oas.models.security.SecurityScheme.Type.APIKEY)
            .in(io.swagger.v3.oas.models.security.SecurityScheme.In.HEADER)
            .name(name);
    }

这是我到达的地方(不幸的是,当我测试端点时它仍然没有授权)

最后,这似乎奏效了(使用@indybee 的指导):

添加安全项()

        .components( new Components()
                .addSecuritySchemes("apiKey", securityScheme("apiKey"))
                .addSecuritySchemes("code", securityScheme("code"))
                )
        .addSecurityItem(new SecurityRequirement().addList("apiKey").addList("code")) 

为每个请求传递 2 个自定义 headers“apiKey”和“代码”

添加此方法:

private SecurityScheme securityScheme(String name) {
    return new io.swagger.v3.oas.models.security.SecurityScheme()
        .type(io.swagger.v3.oas.models.security.SecurityScheme.Type.APIKEY)
        .in(io.swagger.v3.oas.models.security.SecurityScheme.In.HEADER)
        .name(name);
} 

并用以下内容替换您的 .components() 块

.components(new Components()
        .addSecuritySchemes("apiKey", securityScheme("apiKey"))
        .addSecuritySchemes("code", securityScheme("code"))
    )