如何在 AWS API Gateway 中调试“缺少身份验证令牌”?
Posted
技术标签:
【中文标题】如何在 AWS API Gateway 中调试“缺少身份验证令牌”?【英文标题】:How to debug "Missing Authentication Token" in 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 检查点击相关方法后集成响应是否被禁用?就像我分享的图片一样
【参考方案1】:
我发现了发生了什么:
我的 API 是使用 TerraForm 部署的。在 TerraForm 中,您指定的资源之一是 an API Gateway Deployment。我认为如果它所依赖的任何资源(包括/periodicals
资源)发生变化,它会重新部署 API。
唉,我现在认为我必须更新其state_description
才能强制进行新部署。这样做的好处是您可以在不影响 API 用户的情况下更新配置,但这确实意味着您在想要部署更新的配置时明确需要执行操作。
希望这对任何人都有帮助。
tl;dr 与我的想法相反,在添加方法后 API 并没有真正部署。 (您可以在 AWS API Gateway 控制台中手动执行此操作,方法是在“操作”下拉菜单中选择“部署 API”。
【讨论】:
以上是关于如何在 AWS API Gateway 中调试“缺少身份验证令牌”?的主要内容,如果未能解决你的问题,请参考以下文章
如果在 Terraform 模块中创建了 aws_api_gateway_integration,如何在 aws_api_gateway_deployment 资源上填充depends_on?
如何在 AWS API Gateway GET 请求中传递查询参数? [复制]
AWS API Gateway - 如何在正文映射模板中获取日期/时间戳/纪元?
如何使用 AWS CloudFormation 在 AWS API Gateway 集成中指定阶段变量?