Кнопка «Включить авторизацию» в springdo c -openapi-ui для аутентификации токенов на предъявителя (JWT) - PullRequest
3 голосов
/ 24 января 2020

Как включить кнопку «Авторизовать» в springdo c -openapi-ui (OpenAPI 3.0 /swagger-ui.html) для аутентификации токенов на предъявителя, например JWT.

Какие аннотации имеют добавляется в классы Spring @Controller и @Configuration?

Authorize button

Authorize form for Bearer Token Authentication

Ответы [ 2 ]

6 голосов
/ 24 января 2020

Определите глобальную схему безопасности для OpenAPI 3.0, используя аннотацию @io.swagger.v3.oas.annotations.security.SecurityScheme в @Configuration bean-компоненте:

@Configuration
@OpenAPIDefinition(info = @Info(title = "My API", version = "v1"))
@SecurityScheme(
    name = "bearerAuth",
    type = SecuritySchemeType.HTTP,
    bearerFormat = "JWT",
    scheme = "bearer"
)
public class OpenApi30Config {

}

Аннотируйте каждый @RestController метод, требующий проверки подлинности на основе токена носителя (JWT), со ссылкой @io.swagger.v3.oas.annotations.Operation определенная схема безопасности:

@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
1 голос
/ 13 марта 2020

Я предпочитаю использовать инициализацию бина вместо аннотации.

@Configuration
public class OpenApi30Config {

  private final String moduleName;
  private final String apiVersion;

  public OpenApi30Config(
      @Value("${module-name}") String moduleName,
      @Value("${api-version}") String apiVersion) {
    this.moduleName = moduleName;
    this.apiVersion = apiVersion;
  }

  @Bean
  public OpenAPI customOpenAPI() {
    final String securitySchemeName = "bearerAuth";
    final String apiTitle = String.format("%s API", StringUtils.capitalize(moduleName));
    return new OpenAPI()
        .addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
        .components(
            new Components()
                .addSecuritySchemes(securitySchemeName,
                    new SecurityScheme()
                        .name(securitySchemeName)
                        .type(SecurityScheme.Type.HTTP)
                        .scheme("bearer")
                        .bearerFormat("JWT")
                )
        )
        .info(new Info().title(apiTitle).version(apiVersion));
  }
}

Строка кода

.addSecurityItem(new SecurityRequirement().addList(securitySchemeName))

позволяет добавить глобальную схему безопасности и избавиться от записи безопасности для каждого @ Работа метода.

...