设置 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 无线网络应用所需的常见操作