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"))
)
我有一个使用 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"))
)