【问题标题】:Swagger - Authorize request to url with documentationSwagger - 使用文档授权对 url 的请求
【发布时间】:2022-01-21 13:44:52
【问题描述】:

我想知道 Swagger 中是否有一个选项可以授权对包含外部文档的 url 的请求。

我有如下配置,我感兴趣的是urls[1]部分

springdoc.swagger-ui.urls[0].url=/v3/api-docs
springdoc.swagger-ui.urls[0].name=default
springdoc.swagger-ui.urls[1].url=https://asdasd.blob.core.windows.net/my-api/docs.spec
springdoc.swagger-ui.urls[1].name=additional

我可以从服务器(直接从机器卷曲)访问文档,但是从 Swagger(所以浏览器)我不能。我想知道是否有添加例如的选项。 Authorization Bearer xxxx 到这个请求或实际上让服务器发出请求,而不是客户端。

澄清一下 - 我想从远程服务器获取具有 OpenAPI 定义的第二个文件,所以我正在谈论这个:

不是Authorize 部分


我实施的解决方案:

Helen 指出的内容会起作用 - 拦截请求并添加标头 - 但不幸的是,在我的情况下,还有一个与存储的防火墙设置相关的问题。只有来自服务器的流量,而不是来自客户端(浏览器)的流量通过,所以我:

  1. 将 url 设置为我域中的某些内容
    springdoc.swagger-ui.urls[1].url=v3/api-docs/additional
  2. 为远程主机的 url 指定了另一个属性
    mydomain.swagger-ui.additionalDocsUrl=...
  3. 实现了处理该 url 的自定义控制器 - 它从远程获取 json 作为服务器,而不是客户端,因此防火墙通过该请求通过
@Hidden
@RestController
@RequestMapping("/v3/api-docs/additional")
@RequiredArgsConstructor
public class AdditionalOpenApiController {

    @Value("${mydomain.swagger-ui.additionalDocsUrl}")
    private String additionalDocsUrl;

    @Cacheable(value = "ADDITIONAL_API_DOCS", unless = "#result != null")
    @GetMapping(produces = "application/json")
    public String getAdditionalDocs() {
        // in my case remote produces application/octet-stream so it needs to be byte[]
        return Optional.ofNullable(new RestTemplate().getForObject(additionalDocsUrl, byte[].class)) 
                .map(String::new)
                .orElseThrow(() -> new ResourceNotFoundException("Cannot load Additional OpenAPI from storage"));
}

【问题讨论】:

  • 我不确定我是否理解您的问题,但您可以根据 documentation 为单独的请求添加任何身份验证。
  • 我澄清了这个问题。
  • 您需要将requestInterceptor 添加到您的 Swagger UI 配置中。 requestInterceptor 可用于改变传出请求,例如将身份验证标头添加到规范获取请求。我不确定如何在 Springdoc 中配置 requestInterceptor

标签: spring-boot swagger openapi springdoc


【解决方案1】:

这只能以编程方式实现。

  • 首先:实现您自己的requestInterceptor:参见AbstractSwaggerIndexTransformer 示例以编程方式实现您的请求(例如 addCSRF 方法)。
  • 第二次实现你自己的MySwaggerIndexPageTransformer并将它定义为一个spring bean,它将被加载而不是springdoc SwaggerIndexPageTransformer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2018-11-16
    • 1970-01-01
    • 2021-07-05
    • 2015-05-08
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多