选择一个 API 密钥源
在将使用计划与 API 关联并在 API 方法上启用 API 密钥时,针对 API 的传入请求必须包含 API 密钥。API Gateway 将读取密钥并将它与使用计划中的密钥进行比较。如果匹配,API Gateway 将基于计划的请求限制和配额限制请求。否则,将引发 InvalidKeyParameter
异常。作为结果,调用方将收到 403 Forbidden
响应。
您的 API Gateway API 可从下面两个源之一接收 API 密钥:
HEADER
-
您将 API 密钥分发给您的客户,并要求其将 API 密钥作为每个传入请求的
X-API-Key
标头传递。 AUTHORIZER
-
您可以让 Lambda 授权方将 API 密钥作为授权响应的一部分返回。有关授权响应的更多信息,请参阅来自 Amazon API Gateway Lambda 授权方的输出。
有关可考虑的最佳实践,请参阅 API 密钥和使用计划的最佳实践。
使用 API Gateway 控制台为 API 选择 API 密钥源:
-
登录 API Gateway 控制台。
-
选择现有 API 或者创建新 API。
-
在主导航窗格中选定的或新创建的 API 下,选择设置。
-
在设置窗格中的 API 密钥源部分下方,从下拉列表中选择
HEADER
或AUTHORIZER
。 -
选择 Save Changes。
要使用 Amazon CLI 为 API 选择 API 密钥源,请按以下所示调用 update-rest-api
命令:
aws apigateway update-rest-api --rest-api-id 1234123412 --patch-operations op=replace,path=/apiKeySource,value=AUTHORIZER
要让客户端提交 API 密钥,请在以上 CLI 命令中将 value
设置为 HEADER
。
要使用 API Gateway REST API 为 API 选择 API 密钥源,请按以下所示调用 restapi:update
:
PATCH /restapis/fugvjdxtri/ HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20160603T205348Z Authorization: AWS4-HMAC-SHA256 Credential={access_key_ID}/20160603/us-east-1/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature={sig4_hash} { "patchOperations" : [ { "op" : "replace", "path" : "/apiKeySource", "value" : "HEADER" } ] }
要让授权方返回 API 密钥,请在之前的 value
输入中将 AUTHORIZER
设置为 patchOperations
。
请使用下列过程之一以在方法调用中使用以标头为源的 API 密钥或授权方返回的 API 密钥,具体取决于您选择的 API 密钥源类型:
使用以标头为源的 API 密钥:
-
使用所需的 API 方法创建 API。将 API 部署到相关的阶段。
-
新建使用计划,或选择现有使用计划。将部署的 API 阶段添加到使用计划。为使用计划附加 API 密钥,或在计划中选择现有 API 密钥。请记下所选的 API 密钥值。
-
设置 API 方法以获得 API 密钥。
-
将此 API 重新部署到同一阶段。如果将此 API 部署到新阶段,请确保更新使用计划,附加新的 API 阶段。
客户端现在可以调用 API 方法,同时为 x-api-key
标头提供所选的 API 密钥作为标头值。
使用以授权方为源的 API 密钥:
-
使用所需的 API 方法创建 API。将 API 部署到相关的阶段。
-
新建使用计划,或选择现有使用计划。将部署的 API 阶段添加到使用计划。为使用计划附加 API 密钥,或在计划中选择现有 API 密钥。请记下所选的 API 密钥值。
-
创建令牌类型的自定义 Lambda 授权方。包括
usageIdentifierKey:
(作为授权响应的根级属性),其中{api-key}
代表上一步中提到的 API 密钥值。{api-key}
-
设置 API 方法以获得 API 密钥,并针对这些方法启用 Lambda 授权方。
-
将此 API 重新部署到同一阶段。如果将此 API 部署到新阶段,请确保更新使用计划,附加新的 API 阶段。
客户端现在可以调用获得了 API 密钥的方法,而无需明确提供 API 密钥。返回授权方的 API 密钥将自动使用。