我试图将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.
从外观上看,我要么需要一个lambda作为一个自定义授权程序,仅用于api密钥(我不熟悉授权程序,但如果在控制台中设置所需的api密钥时不需要授权程序,这似乎没有意义);要么我需要对这个神秘的
x-amazon-apigateway-auth
我找不到它的文档(所有其他的openapi扩展amazon都记录了
here
下面是一个minimal示例:
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
由于api密钥安全性是在根级别设置的,这就向我建议,所有路径都应该使用api密钥(除非被单个路径覆盖),实际发生的情况是上述警告,并且在导入时不需要api密钥。