node.js - 如何在 AWS API 网关中调试 "Missing Authentication Token"?

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

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

这在 AWS 控制台中测试该方法时效果很好。然而,直接从我的浏览器对该资源执行请求会导致以下响应:

{"message":"Missing Authentication Token"}

有了这个标题:

x-amzn-errortype: MissingAuthenticationTokenException

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

我想我已经阅读了关于此错误消息的所有主题,但它们似乎都不适用于我:

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

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

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

最佳答案

我发现发生了什么:

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

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

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

tl;dr 与我的想法相反,添加方法后 API 并未实际部署。 (您可以通过在“操作”下拉列表中选择“部署 API”,在 AWS API Gateway 控制台中手动执行此操作。

关于node.js - 如何在 AWS API 网关中调试 "Missing Authentication Token"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46072388/

相关文章:

node.js - 在用express发送响应后是否可以使用某种 'middleware'?

javascript - Node 'net' 模块 ECONNREFUSED 错误

java - 为什么 Alternator 模拟 DynamoDB 从 maven 而不是 Eclipse 失败?

javascript - 我在使用 Node js 对 dynamoDB 中的表执行更新操作时遇到 ConditionalCheckFailedException

node.js - 如何禁用 connect-assets 文件名摘要

javascript - Mongoose 模型的复用策略

php - 使用 laravel 将数据库备份到 amazon s3 bucket

ruby-on-rails - CORS 与 Amazon S3 和 Cloudfront

python - 从 AWS SES 中的 content-type=application/zip 和 base64 编码解析文本文件

java - 使用 gradle 编译 zip,包括由同级子项目实现的库