如何使用 Swagger 在 API 网关上全局设置 API 密钥安全性

Jon*_*ing 5 amazon-web-services swagger aws-api-gateway openapi

我正在尝试将 openapi/swagger 文件导入 api 网关,但我无法按预期获得安全设置。我想要一个所有路径都需要的 api 密钥。

导入后在控制台中设置所需的 api 密钥有效,但这种解决方案是不可取的,同样有效的是单独设置每个路径中的安全字段,但我正在寻找一个全局解决方案。

当我尝试导入文件时,我收到以下警告:

Your API was not imported due to errors in the Swagger file.

    Method 'GET' on resource '/' specified security,
    but no custom authorizers were created and the extension
    x-amazon-apigateway-auth was not set.
    This method will be not be secured. 
Run Code Online (Sandbox Code Playgroud)

如此看来,我要么需要一个 lambda 作为仅用于 api 密钥的自定义授权方(我不熟悉授权方,但如果我在设置所需的 api 密钥时不需要授权方,这似乎没有意义控制台);或者我需要对这个神秘的东西做一些x-amazon-apigateway-auth我找不到文档的事情(亚马逊在此处记录所有其他 openapi 扩展)。

一个小例子如下:

openapi: 3.0.1
info:
  title: test
  version: 0
servers:
- url: "/"
security:
  - ApiKey: []
paths:
  "/":
    get:
      # if I copy the security part into here things work 
      responses:
        '204':
          description: no content
      x-amazon-apigateway-integration:
        httpMethod: GET
        type: http
        uri: https://httpstat.us/204
components:
  securitySchemes:
    ApiKey:
      type: apiKey
      name: x-api-key
      in: header
x-amazon-apigateway-api-key-source: HEADER

Run Code Online (Sandbox Code Playgroud)

由于 api 密钥安全设置在根级别,这向我建议所有路径都应该使用 api 密钥(除非被单个路径覆盖),实际发生的是上述警告,并且在导入时不需要 api 密钥。

小智 5

在我写这个答案时,根据他们的文档,AWS API网关不支持在根级别设置安全性。

API Gateway 不使用 OpenAPI 规范中定义的根级别安全性。因此,需要在操作级别定义安全性才能适当应用。