当前位置: 首页 > 知识库问答 >
问题:

如何要求Swagger UI为每个endpoint全局添加承载令牌字段?

樊宏邈
2023-03-14

我有以下配置:

@Bean
public OpenAPI myAPI() {
  return new OpenAPI()
      .components(new Components()
          .addSecuritySchemes("bearer-key",
              new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")))
      .info(new Info()
          .title("MY API")
          .description("Documentation of API v.1.0")
          .version("1.0")
      ).addSecurityItem(
          new SecurityRequirement().addList("bearer-jwt", Arrays.asList("read", "write")));
}

我找到了解决方法——用以下方法标记每个独立endpoint:

@Operation(summary = "some description", security = { @SecurityRequirement(name = "bearer-key") })

但我不喜欢做这种重复的工作。

是否有一种方法可以使每个其他端都实现全球化?

共有2个答案

令狐唯
2023-03-14

使用 io.swagger.v3.oas.annotations.OpenAPIDefinition 全局定义 io.swagger.v3.oas.annotations.security.SecurityRequire

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@OpenAPIDefinition(security = {@SecurityRequirement(name = "bearer-key")})
public class OpenApiConfig {

    @Bean
    public OpenApiCustomiser customerGlobalHeaderOpenApiCustomiser() {
        return openApi -> openApi.getComponents()
            .addSecuritySchemes("bearer-key",
                new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT"));
    }
}
云韬
2023-03-14

它只适用于微小的差异

当我使用swagger 2时,我必须提供令牌

持票人eyJhbGciOi。。。。

但现在我不得不像提供它一样

EYJhbGciOi……

public OpenAPI myAPI() {
        return new OpenAPI()
                .components(new Components()
                        .addSecuritySchemes("bearer-key",
                                new SecurityScheme()
                                        .type(SecurityScheme.Type.HTTP)
                                        .scheme("bearer")
                                        .bearerFormat("JWT")
                        )
                )
                .info(new Info()
                        .title("My API")
                        .description("Documentation of API v.1.0")
                        .version("1.0")
                ).addSecurityItem(
                        new SecurityRequirement()
                                .addList("bearer-jwt", Arrays.asList("read", "write"))
                                .addList("bearer-key", Collections.emptyList())
                );
    }
 类似资料:
  • 我正在使用Spring Boot构建一个REST API。我添加了Swagger-ui来处理文档。我在实现客户机身份验证流到swagger时遇到了一个问题,问题是我可以通过基本auth让swagger-ui授权提供的客户机ID(用户名)和客户机机密(密码),但swagger UI似乎没有应用到endpoint调用的结果访问令牌。 确认,我的授权过程;-使用basic auth将base64编码的用

  • 要使用API,用户需要进行身份验证,一个SESSIONID cookie被添加到他的浏览器中,该cookie将用于请求sessionToken查询参数。 我怎样才能告诉 Swagger 每个请求都需要一个会话令牌查询参数?我可以添加全局查询参数吗?

  • 使用Vue。js我试图用Spring Boot在RESTful API中实现JWT登录表单,但除非我向请求中添加承载令牌,否则我得到的只是403状态。我已经将endpoint设置为无需任何许可即可访问,并且在postman上可以在没有授权标头的情况下发送请求。这是我在Spring上的安全配置的一部分: 这就是vue。我发出发帖请求的js服务: 我想这样做,这样就不需要令牌来访问您请求相同令牌的部分

  • 我有一个Java EE8应用程序,在该应用程序中,我使用OpenAPI注释来定义RESTendpoint,并自动生成一个昂首阔步的UI。对于身份验证,我使用JSON Web令牌(JWT)。 当我从邮递员发送请求时,一切都很好,但是,我不知道如何在我的昂首阔步的UI中添加一个承载令牌的字段。 我使用注释定义我的安全方案: 我尝试将此方案作为添加到资源的注释中,并直接添加到方法中。 因此,我现在在Op

  • 我通过使用承载令牌实现了对SpringBoot API的授权,当登录成功时,该令牌被添加到响应的“授权”头中,然后需要通过React项目的登录获取方法读取该令牌,并添加到后续请求的“授权”头中。 不幸的是,虽然我被告知这是不可能使用Fetch,所以我现在试图重构我的登录功能,以便它返回响应正文中的令牌,而不是标题。 我不知道如何做到这一点,目前没有返回JSON正文对象,只有标头,我将不得不更改我的

  • 对于我们的应用程序,我们需要能够提供团体访问文件。每个用户可能拥有大量的组,因此使用“自定义令牌”解决方案是没有意义的(无论如何,这是非常尴尬的)。 我发现,Firebase的存储安全规则非常有限。主要问题是,我们将组定义保留在存储安全规则无法访问的Firestore中。 为了克服这个问题,我们决定在每个上传文件的元数据中包含一个“令牌”,组中的任何人都可以访问这个令牌。当他们下载一个文件时,他们