如何调试"缺少身份验证令牌"在AWS API Gateway中?

时间:2017-09-06 10:05:32

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

我有一个代表AWS Lambda函数的API网关资源。这适用于传递尾随路径参数(/periodicals/{tail+}),但由于我希望这些参数是可选的,我还向更高资源(ANY)添加了/periodicals方法:< / p>

从AWS控制台中测试该方法时,此方法正常。但是,从我的浏览器直接对该资源执行请求会导致以下响应:

{"message":"Missing Authentication Token"}

使用此标题:

x-amzn-errortype: MissingAuthenticationTokenException

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

我想我读了这个错误消息的每个帖子,但它们似乎都不适用于我:

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

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

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

1 个答案:

答案 0 :(得分:0)

我发现了发生了什么:

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

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

希望这有助于任何人。

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