无法通过 API 网关代理调用经过身份验证的 API 网关 lambda 端点

问题描述 投票:0回答:1

目前,我有一个 AWS API Gateway REST API,它具有使用 AWS_IAM 身份验证保护的 lambda 端点。目前,我的客户正在成功调用此端点并返回有效响应。

我现在尝试在此 REST API 前面引入一个代理 API 网关,并更新客户端以通过此代理调用端点。对于我的 REST API 上未经身份验证的端点,代理工作正常,但对于使用 AWS_IAM 保护的端点,我收到 403 错误和响应

{"message":"Missing Authentication Token"}

除了调用的 URL 之外,对代理的请求或直接对 REST API 的请求是相同的。有谁能够解释为什么会出现这种情况以及我该如何解决它?

amazon-web-services aws-api-gateway
1个回答
0
投票

您在使用代理 API 网关时遇到的 AWS_IAM 身份验证错误(“缺少身份验证令牌”)问题可能与 AWS 签名版本 4 (SigV4) 身份验证过程有关。

AWS 签名版本 4 依赖于整个 HTTP 请求的签名,包括特定标头。引入代理后,代理通常会修改请求或向请求添加标头。如果代理以影响 AWS 签名的方式更改标头,则签名将不再有效,从而导致 403 错误。

要解决此问题,请考虑以下步骤:

  1. 检查代理对标头的修改:确保您的代理不是 更改或省略 AWS_IAM 所需的任何标头 验证。特别是,AWS SigV4 依赖于诸如 授权、X-Amz-Date 等。代理应该传递这些 标题不变。
  2. 更新代理配置:检查代理的配置 API网关并确保它正确地通过所有 AWS_IAM 身份验证所需的标头。这可能涉及 配置代理以传递未更改的特定标头。
  3. 调试和日志记录:在您的设备上启用日志记录和调试功能 代理和 AWS 服务。检查每一步的标题 请求-响应周期来识别任何差异。
  4. 比较请求:比较直接发送到的HTTP请求 REST API 并通过代理。寻找标题中的差异, 特别是那些与 AWS_IAM 身份验证相关的。
© www.soinside.com 2019 - 2024. All rights reserved.