首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧靴,摇摆和授权

弹簧靴,摇摆和授权
EN

Stack Overflow用户
提问于 2022-01-19 01:59:29
回答 1查看 1.8K关注 0票数 1

我有一个使用Springdoc (Swagger)的Springdoc。API具有在标头中传递"apiKey“和"code”字段的安全性。我在正确配置Swagger以启用Swagger中的身份验证功能时遇到了困难。这是配置:

代码语言:javascript
复制
@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())))
);
  } 

我知道这是不正确的,但不确定如何配置它。

任何帮助都很感激。

解决方案的尝试: from @indybee建议:

代码语言:javascript
复制
@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的指导):

addSecurityItem()

代码语言:javascript
复制
        .components( new Components()
                .addSecuritySchemes("apiKey", securityScheme("apiKey"))
                .addSecuritySchemes("code", securityScheme("code"))
                )
        .addSecurityItem(new SecurityRequirement().addList("apiKey").addList("code")) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 13:18:12

向每个请求传递"apiKey“和”代码“的2个自定义标头

添加此方法:

代码语言:javascript
复制
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()块替换为

代码语言:javascript
复制
.components(new Components()
        .addSecuritySchemes("apiKey", securityScheme("apiKey"))
        .addSecuritySchemes("code", securityScheme("code"))
    )

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70764471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档