【发布时间】:2022-02-08 10:35:11
【问题描述】:
假设我有一个 AWS API 网关。我在所述网关中有一个资源,需要使用网关 API 密钥。我希望我的服务器知道我的各种密钥中的哪一个被用于进行身份验证(仅用于日志记录;没有基于此的访问控制)。
如何在发送到服务器的请求中包含网关 API 密钥的名称?
【问题讨论】:
标签: amazon-web-services aws-api-gateway
假设我有一个 AWS API 网关。我在所述网关中有一个资源,需要使用网关 API 密钥。我希望我的服务器知道我的各种密钥中的哪一个被用于进行身份验证(仅用于日志记录;没有基于此的访问控制)。
如何在发送到服务器的请求中包含网关 API 密钥的名称?
【问题讨论】:
标签: amazon-web-services aws-api-gateway
首先,您提到了记录哪些密钥用于身份验证。 API GW API 密钥旨在用于使用计划,而不是身份验证/授权 (link)。
对于用户身份验证和授权,请勿使用 API 密钥。使用 IAM 角色、Lambda 授权方或 Amazon Cognito 用户池。
我认为是因为这个原因,AWS 没有将密钥进一步转发到后端。此外,如果您使用了 Lambda 或 Cognito 等授权方之一,您的后端将有办法记录经过身份验证的身份。
如果您真的想记录 API 密钥,我认为您可以使用 映射模板 明确告诉 API GW 转发 x-api-key 标头。
【讨论】:
附加到 API 网关的 API 密钥必须是唯一的。来自docs:
API 键值必须是唯一的。如果您尝试创建两个名称不同但值相同的 API 密钥,API Gateway 会将它们视为相同的 API 密钥。
没有这样的标题来指定密钥的名称。您可以创建自己的自定义标头,在其中添加此信息,但没有任何东西可以保证使用给定的 API 密钥发送正确的名称。您可能希望使用 AWS 开发工具包从您的服务器调用来检索 API 密钥的名称。
如果您使用的是 Lambda 授权函数,您可以在该函数中获取 API 密钥的名称,并将其作为标头转发到后端服务器。
【讨论】: