设置 AWS ApiGateway 端点所需的 API 密钥(Swagger 导入)

Posted

技术标签:

【中文标题】设置 AWS ApiGateway 端点所需的 API 密钥(Swagger 导入)【英文标题】:Set API Key to be required for AWS ApiGateway endpoint (Swagger import) 【发布时间】:2017-07-22 00:59:42 【问题描述】:

我尝试使用 Swagger/OpenAPI 定义我的 AWS Api Gateway 基础设施。到目前为止一切正常,但是我的端点需要 API 密钥时遇到问题。

我的 Swagger 文件如下所示(缩短):

---
swagger: 2.0
basePath: /dev
info:
  title: My API
  description: Proof of concept
schemes:
  - https
securityDefinitions:
  api_key:
    type: apiKey
    name: X-Api-Key
    in: header

paths:
  /example-path:
    options:
      consumes:
        - application/json
      produces:
        - application/json
      x-amazon-apigateway-integration:
        type: mock
        requestTemplates:
          application/json: |
            
              "statusCode" : 200
            
        responses:
          "default":
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Methods: "'GET,HEAD,OPTIONS'"
              method.response.header.Access-Control-Allow-Headers: "'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token'"
              method.response.header.Access-Control-Allow-Origin: "'*'"
            responseTemplates:
              application/json: |
                
    responses:
      200:
        description: Default response for CORS method
        headers:
          Access-Control-Allow-Headers:
            type: "string"
          Access-Control-Allow-Methods:
            type: "string"
          Access-Control-Allow-Origin:
            type: "string"          

    get:
      security:
        - api_key: []
      x-amazon-apigateway-integration:

        # Further definition of the endpoint, calling Lambda etc...

在 CloudFormation 模板中链接 Swagger 文件已成功处理。但是当我在 AWS Web 控制台中打开端点时,API Key Required 的标志仍然是 false

有什么建议吗?谢谢。

【问题讨论】:

【参考方案1】:

找到解决方案:API 密钥必须命名为 x-api-key(全部小写)。

似乎只有这样才能在导入期间识别设置。

【讨论】:

答案的来源是这样的句子:“客户端现在可以调用 API 方法,同时提供带有所选 API 密钥的 x-api-key 标头作为标头值。”在此处的 aws 文档中看到:docs.aws.amazon.com/apigateway/latest/developerguide/…【参考方案2】:

要启用所需的 API 密钥,您需要在安全方案块中添加此 "x-amazon-apigateway-api-key-source" : "HEADER"

看一个例子:

    "components" : 
        "securitySchemes" : 
          "api-key" : 
            "type" : "apiKey",
            "name" : "x-api-key",
            "in" : "header",
            "x-amazon-apigateway-api-key-source" : "HEADER"
          
        
      

这是一个使用代理请求的例子。 你的 JSON 应该是这样的: openapi3


    "openapi": "3.0.3",
    "info": 
      "title": "User Portal",
      "description": "API focused in User Portal.",
      "version": "v1"
    ,
    "paths": 
      "users/proxy+": 
        "options": 
            "x-amazon-apigateway-integration": 
              "httpMethod": "OPTIONS",
              "payloadFormatVersion": "1.0",
              "type": "MOCK"
            
          ,
        "x-amazon-apigateway-any-method": 
          "produces":[ "application/json"],
          "parameters": [
            
              "name": "proxy",
              "in": "path",
              "required": "true",
              "type": "string"
            
          ],
          "responses": ,
          "security": [
            
              "api-key": []
          
        ],
          "x-amazon-apigateway-integration": 
            "uri":"https://test.com.br/users/proxy",
            "httpMethod":"ANY",
            "type": "HTTP_PROXY"
          
        
      
    ,
    "components" : 
        "securitySchemes" : 
          "api-key" : 
            "type" : "apiKey",
            "name" : "x-api-key",
            "in" : "header",
            "x-amazon-apigateway-api-key-source" : "HEADER"
          
        
      
  

在 openapi2 中,您可以在 yml 中添加它。

swagger: 2.0
basePath: /dev
info:
  title: My API
  description: Proof of concept
schemes:
  - https
securityDefinitions:
  api_key:
    type: apiKey
    name: X-Api-Key
    in: header
    x-amazon-apigateway-api-key-source: HEADER

如果您在使用 api 与 openapi 集成时遇到问题,可以查看这篇文章:Working with API Gateway extensions to OpenAPI

【讨论】:

组件部分是针对 Open API 3.0 的,问题是针对 Open API 2.0 的 Tetenda Zifudzi 我在 Open API 2 中添加了一个示例。

以上是关于设置 AWS ApiGateway 端点所需的 API 密钥(Swagger 导入)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 lambda 调用 IAM 授权的 AWS ApiGateway 端点?

是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?

如何将 AWS CloudFront 和 API Gateway 并排用于同一个域?

JN5169 NXP ZigBee PRO 无线网络应用所需的常见操作

在 Cloudformation 模板中为 AWS API Gateway 使用 IAM 角色

AWS Api Gateway 未在 204 上设置 CORS