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

用于在AWS API网关上支持API键的Spring Boot Swagger注释

劳和歌
2023-03-14

我正在尝试设置一个AWS API网关,该网关需要在任何请求的标头中使用API密钥。我设置了swagger来生成json定义,AWS很好地导入了它。但是,当我尝试添加API密钥安全定义时,Amazon拒绝了我的swagger API文档,错误如下:

由于Swagger文件中的错误,您的API未导入。API密钥安全定义“api_key”有意外的名称或位置。忽略。

我想我做错了。。。因此,我尝试了这方面的几种变化。

给定使用springfox创建的Spring Boot配置:

 @Bean
    public Docket swaggerSpringMvcPlugin() {

    List<ApiKey> securitySchemes = new ArrayList<>();
    ApiKey apiKey = new ApiKey("apiKey", "api_key", "header");
    list.add(apiKey);
    //the above is probably where i'm missing something

        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .apiInfo(apiInfo())
                .securitySchemes(securitySchemes)
                .select()
                .paths(PathSelectors.regex("/api/swaggertest"))
                .build();
    }

上述api定义如下:

@RestController
public class SwaggerTestController {

      @ApiOperation(notes = "my notes", value = "test", nickname = "testNickname",
                tags = {"tests"}, authorizations = {@Authorization(value="api_key")} )
        @ApiResponses({
                @ApiResponse(code = 200, message = "Nice!", response = Swag.class)
        })
        @RequestMapping(value = "/api/swaggertest", method = RequestMethod.GET, produces = "application/json")
        public ResponseEntity<Swag> getSwag() throws Exception {


                return ResponseEntity.ok().body(new Swag());

        }
    }

当我运行我的应用程序时,api-docs会产生(我删除了一些部分以保持它更小):

{
swagger: "2.0",

host: "localhost:4014",
basePath: "/",
tags: [
{
    name: "swagger-test-controller",
    description: "Swagger Test Controller"
}
],
paths: {
    /api/swaggertest: {
get: {
    tags: [
    "tests"
],
summary: "test",
description: "my notes",
operationId: "testNickname",
consumes: [
    "application/json"
],
produces: [
    "application/json"
],
responses: {
    200: {
    description: "Nice!",
    schema: {
        $ref: "#/definitions/Swag"
    }
    }
   },
    security: [
    {
    api_key: [ ]
    }
    ]
    }
   }
},
securityDefinitions: {
    api_key: {
    type: "apiKey",
    name: "api_key",
    in: "header"
}
},
definitions: {
    Swag: {
    type: "object",
    properties: {
    foo: {
        type: "string"
}

} } }

如果有人能帮我指出如何添加api密钥支持,我将不胜感激。

共有1个答案

龚招
2023-03-14

安全定义应如下所示,引用<代码>

"<any_name>" : {
  "type" : "apiKey",
  "name" : "x-api-key",
  "in" : "header"
},
 类似资料:
  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • 我试图从azure key vault中为azure函数获取连接字符串。这些是我做的步骤, > 在azure函数中创建了一个托管标识(系统分配) 在azure密钥库中创建秘密 如有任何帮助,将不胜感激

  • 请参阅我能够启用HTTP/2支持jetty服务器与JDK8的用户交互界面通过排除tomcat启动器和添加jetty启动到Spring Web配置,还添加了jetty-alpn-conscrypt-server, http2-server依赖。 但是在使用Netty server的Spring Cloud API网关端,我尝试了所有步骤,但都没有弄清楚,如何在Spring Cloud API网关中启

  • 我使用Lambda和API Gateway来构建API。而且,我读到AWS CloudFront支持IPv6。我想使用自定义域和我创建的证书与ACM要求的API网关。 但是,当我使用http://ready.chair6.net测试是否为CloudFront URL找到AAAA记录时,没有找到AAAA记录。

  • 我想扩展我的网站以支持OAuth,以便第三方应用程序可以访问数据并代表网站用户执行操作。我该怎么做? 基本上,我想知道如何生成访问令牌和应该完成的数据库设置。

  • 原文链接:Serverless 应用开发指南:API Gateway + S3 + AWS Lambda 打造 CRUD 在前两篇文章《Serverless 应用开发指南: serverless 的 hello, world》和 《Serverless 开发指南:AWS IoT 服务开发》 里,我们简单地介绍了如何用 Serverless 和 AWS IoT 开发入门级的 Serverless 应