安全性未从 Open API 生成器添加到 Swagger
Security is not added to Swagger from Open API generator
我的团队正在开展一个新项目,我们正在按照 API 第一种方法实施 API。我们正在使用 openapi-generator-maven-plugin
从格式为 OpenAPI 3.0.3 的 yml 文件生成我们的 API。我们使用 springfox 2.9.2 生成 swagger 文件。我面临的问题是当我试图为请求的 swagger 添加安全性时。
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: [ ]
Authorize
按钮没有出现在swagger页面中,只出现了请求附近的锁,但没有任何作用(见下图)。
我观察到的是,如果我打开 /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 还是我遗漏了什么?
原因:spring 库中的 Bearer Auth isn't implemented :(
解决方案 - 扩展生成的 Docket
:
导入生成的配置 class,然后将安全架构 (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 配置而无需覆盖,而只是扩展
我的团队正在开展一个新项目,我们正在按照 API 第一种方法实施 API。我们正在使用 openapi-generator-maven-plugin
从格式为 OpenAPI 3.0.3 的 yml 文件生成我们的 API。我们使用 springfox 2.9.2 生成 swagger 文件。我面临的问题是当我试图为请求的 swagger 添加安全性时。
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: [ ]
Authorize
按钮没有出现在swagger页面中,只出现了请求附近的锁,但没有任何作用(见下图)。
我观察到的是,如果我打开 /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 还是我遗漏了什么?
原因:spring 库中的 Bearer Auth isn't implemented :(
解决方案 - 扩展生成的 Docket
:
导入生成的配置 class,然后将安全架构 (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 配置而无需覆盖,而只是扩展