【问题标题】:How to debug "Missing Authentication Token" in AWS API Gateway?如何在 AWS API Gateway 中调试“缺少身份验证令牌”?
【发布时间】:2018-02-14 18:39:47
【问题描述】:

我有一个代理到 AWS Lambda 函数的 API Gateway 资源。这对于传递尾随路径参数 (/periodicals/{tail+}) 效果很好,但由于我希望这些参数是可选的,我还向更高的资源 (/periodicals) 添加了一个 ANY 方法:

在 AWS 控制台中测试该方法时,这可以正常工作。但是,从我的浏览器直接对该资源执行请求会产生以下响应:

{"message":"Missing Authentication Token"}

有了这个标题:

x-amzn-errortype: MissingAuthenticationTokenException

它还有一个 x-cache 标头,其值为 Error from cloudfront,所以我猜它可能与 CloudFront 有关。我还没有明确设置 CloudFront,也不知道如何检查?

我想我阅读了有关此错误消息的所有主题,但似乎没有一个适用于我:

  • 我的方法不需要授权:
  • 我很确定 URL 是正确的。当我在浏览器中访问/periodicals/whatever(即{tail+} 资源)时,它可以正常工作,但/periodicals 并非如此。
  • CORS 已启用,因为两个资源都指向同一个 Lambda 函数,该函数处理 CORS 并适用于子路径。
  • HTTP 动词应该无关紧要,因为它正在侦听 ANY
  • 无论我是否添加斜杠,结果都是一样的。
  • API 已部署。
  • 我认为 API 资源对我的 Lambda 函数有足够的权限,因为我可以从 AWS 控制台成功执行它:

感谢@Lakindu,一个有趣的观察是阶段视图中的资源下方没有列出任何方法:

我还能做些什么来找出问题所在?

【问题讨论】:

  • 在选择 lambda 函数“Stages”后,您是否在左侧菜单中检查了 API 网关?是否被屏蔽?
  • @Lakindu 嗯,这看起来很可疑:i.imgur.com/8bpfgGT.png 你知道为什么没有列出/periodicals 的方法吗?
  • 你需要有一个资源,在资源里面你可以有方法点击/periodicals然后操作按钮,创建方法
  • @Lakindu 你的意思是在左边的“资源”部分?因为我认为我已经有了一个方法? i.stack.imgur.com/VdLcm.png
  • imgur.com/a/SnxMC 检查点击相关方法后集成响应是否被禁用?就像我分享的图片一样

标签: node.js amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

我发现了发生了什么:

我的 API 是使用 TerraForm 部署的。在 TerraForm 中,您指定的资源之一是 an API Gateway Deployment。我认为如果它所依赖的任何资源(包括/periodicals 资源)发生变化,它会重新部署 API。

唉,我现在认为我必须更新其state_description 才能强制进行新部署。这样做的好处是您可以在不影响 API 用户的情况下更新配置,但这确实意味着您在想要部署更新的配置时明确需要执行操作。

希望这对任何人都有帮助。

tl;dr 与我的想法相反,在添加方法后 API 并没有真正部署。 (您可以在 AWS API Gateway 控制台中手动执行此操作,方法是在“操作”下拉菜单中选择“部署 API”。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2021-08-28
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2017-12-07
    • 2020-07-18
    相关资源
    最近更新 更多