安全性未从开放 API 生成器添加到 Swagger

问题描述 投票:0回答:1

我正在团队中开发一个新项目,我们正在遵循 API 优先方法来实现 API。我们使用

openapi-generator-maven-plugin
从 OpenAPI 3.0.3 格式的 yml 文件生成我们的 API。为了生成 swagger 文件,我们使用 springfox 2.9.2。我面临的问题是当我尝试为请求增加安全性时。

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
security:
  - bearerAuth: [ ]

swagger 页面中不会出现

Authorize
按钮,只出现请求附近的锁,但它没有执行任何操作(见下图)。

我观察到,如果我打开

/v2/api-docs
,swagger json 不包含安全定义部分。

我设法添加安全性的唯一方法是通过在 Docket 对象中添加代码来添加安全部分,如下所示:

new Docket(DocumentationType.SWAGGER_2)
    .securityContexts(Collections.singletonList(securityContext()))
    .securitySchemes(Collections.singletonList(bearerJwtKey()))
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.example"))
    .paths(PathSelectors.any())
    .build();

这是为 Swagger UI 添加安全性的唯一方法还是我遗漏了什么?

enter image description here

spring-boot swagger openapi openapi-generator
1个回答
6
投票

原因:Bearer Auth 尚未在 Spring 库中实现 :(

解决方案 - 扩展生成的
Docket

导入生成的配置类,然后将安全模式 (

ApiKey
) 添加到现有
Docket
bean。示例:

@Configuration
@Import(OpenAPIDocumentationConfig.class) // openapi generated config class
public class SwaggerConfiguration {
   @Autowired
   ApplicationContext context;

   @PostConstruct
   public void extendExistingDocketWithSecurity() {
      Docket docket = context.getBean(Docket.class);
      docker.securitySchemes(Collections.singletonList(bearer()));
   }

   private static ApiKey bearer() {
      // where "bearerAuth" - name of your schema in YML spec. file
      return new ApiKey ("bearerAuth", HttpHeaders.AUTHORIZATION, "header");
   }

完成!你太棒了! 现在您正在使用生成的 swagger 配置而不覆盖,而只是扩展

© www.soinside.com 2019 - 2024. All rights reserved.