如何在AWS API网关中调试“Missing Authentication Token”?

问题描述:

我有一个代理AWS Lambda函数的API网关资源。这对于通过尾随的路径参数(/periodicals/{tail+})工作得很好,但我想这些参数是可选的,我还增加了ANY方法到更高的资源(/periodicals):如何在AWS API网关中调试“Missing Authentication Token”?

能正常工作时,从AWS控制台内测试该方法。直接从我的浏览器执行对资源的请求,然而,结果如下回应:

{"message":"Missing Authentication Token"} 

有了这个标题:

x-amzn-errortype: MissingAuthenticationTokenException 

它也有一个x-cache头与价值Error from cloudfront,所以我猜猜这可能与CloudFront有关。我虽然没有明确地设置CloudFront,但真的不知道如何检查?

我觉得我读了此错误消息的每个线程,但他们都不适用于我:

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

一个有趣的现象,这要归功于@Lakindu,是没有方法在下面列出在阶段的资源视图:

还有什么我能做的,找出什么错误?

+0

您是否在选择了lambda函数之后在左侧菜单中检入了API网关,阶段“?不管它是否被阻止? –

+0

@Lakindu嗯,这确实看起来很可疑:http://i.imgur.com/8bpfgGT.png你知道为什么没有方法列出'/期刊'吗? – Vincent

+0

你需要有一个资源,内部资源,你可以有方法 点击/期刊,然后行动按钮,创建方法 –

我发现了怎么回事:

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

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

希望这可以帮助任何人。

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