AWS API网关 {"message":"缺少身份验证令牌"}

11
我正在使用API Gateway通过aws lambda与部署的aws sagemaker模型进行通信构建REST API。当我测试该方法时(Method Test Results),我的lambda函数会返回所需的结果。我已经部署了API并且在正确的调用URL上使用资源名称附加(Method Invoke URL)。最后,我已经检查了此方法请求的所有身份验证设置(Method Auth Settings)。但是,当我将调用URL输入浏览器或尝试调用REST API(从我正在开发的Web应用程序cloud9 IDE中)时,我会收到此错误消息:“{"message":"Missing Authentication Token"}”(URL Response)。

我的API非常简单,只有一个POST请求,不包含任何其他资源或方法。我还尝试在“/”下设置该方法,但遇到了相同的问题。

许多人都遇到这个问题,并且我花了一段时间阅读类似的帖子-但解决方案归结为我上面检查过的问题。如果有人能帮忙,将不胜感激!

Iain


5个回答

17
您已经使用POST方法对API网关资源进行了配置,并在使用API Gateway控制台进行测试时,控制台会处理将HTTP方法设置为POST。但是,当您直接从浏览器访问调用URL时,会使用GET方法。
API Gateway默认情况下返回{"message":"Missing Authentication Token"}响应,用于未定义的方法或不存在的路径,如此处所示。

如果API Gateway无法处理传入请求,则会向客户端返回错误响应,而不会将请求转发到集成后端。默认情况下,错误响应包含简短的描述性错误消息。例如,如果您尝试在未定义的API资源上调用操作,则会收到带有{ "message": "Missing Authentication Token" }消息的错误响应。

请使用POST方法测试您的API。可以使用命令行(curl)或使用Postman来完成此操作。

3
那让我们弄清楚一点,如果你尝试使用一个不存在的资源调用API,它不会返回错误信息"资源不存在",而是说"缺少令牌",即使没有需要的令牌吗?谢谢AWS。 - NeilG

15

为了帮助像我一样的傻瓜,你会遇到这个错误的另一个原因是你请求的URL没有配置。

例如,你在/上设置了代理API,通过该API发送请求到后端,而该路径为https://mumblemumble/prod,如果你请求https://mumblemumble/prod本身而不是https://mumblemumble/prod/your/resource,你将收到此错误。


1
这样的提醒很有用...今天早上它为我节省了无数分钟的调试时间。 - Zachary Yates
当您使用完整的资源路径并将其配置为“GET”,但发送了错误的HTTP方法(例如POST)时,您也会收到此错误。 - eephillip

1
在我的情况下,URL 不正确。从 Aws APIs 中,前往您的 API,进入您的方法所在的 "stages",找到 "invoke URL",然后在 Postman 中使用它。

1
另一个原因是在方法之前创建了部署,因此阶段不包含该方法,尽管API包含该方法。不要忘记为部署添加依赖项。

0

另一个可能的原因是Lambda函数代码抛出了错误。我曾经遇到过类似的问题,结果发现是我的Python代码中出现了TypeError。您可以检查CloudWatch日志以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接