如何排查 API Gateway REST API 端点的 403“Missing Authentication Token”(缺少身份验证令牌)错误?
上次更新日期:2023 年 1 月 6 日
我尝试调用 Amazon API Gateway REST API 时,不断收到 403“Missing Authentication Token”(缺少身份验证令牌)错误消息。如何排查这些错误?
简短描述
API Gateway REST API 端点返回 Missing Authentication Token(缺少身份验证令牌)错误的原因如下:
- 针对不存在的方法或资源发出 API 请求。
- API 方法已启用 AWS Identity and Access Management(IAM)身份验证但 API 请求未签名。
- API 可能配置了修改过的网关响应,或者响应来自后端集成。
要排查 API Gateway 的其他类型 403 错误,请参阅如何排查来自 API Gateway 的 HTTP 403 错误?
解决方法
确认 API Gateway 资源路径中配置了方法和资源
按照使用 API Gateway 控制台设置方法中的说明进行操作。有关更多信息,请参阅设置 API 资源。
重要提示:您必须部署 API 以使更改生效。
对于请求方法发送到根资源的具有代理资源集成的 API,请验证根资源下是否配置了方法。
确认 API Gateway 响应未经修改或后端集成未发送响应
如果 API 方法已启用 IAM 身份验证,请确认 API 请求是否已签署
有关更多信息,请参阅 Signing AWS API requests(签署 AWS API 请求)和 Elements of an AWS API request signature(AWS API 请求元素签名)。
确认您向 REST API 端点发送正确的 HTTP 方法请求
从 Web 浏览器测试 REST API 终端节点会自动发送 GET HTTP 方法请求。
若要测试 POST HTTP 方法请求,请使用不同的 HTTP 客户端。例如:Postman 或 curl。
使用 POST HTTP 方法请求的 curl 命令的示例
$ curl -X POST <API URL> -d <request body>
使用 JSON 标头发送请求的示例
$ curl --location -X POST 'https://1234WXYZ.execute-api.us-east-1.amazonaws.com/stage/lambda_proxy' --header 'Content-Type: application/json' --data-raw '{"x":"y"}'
使用 AWS V4 签名身份验证发送 curl POST 请求的示例
$ curl -X POST "<ENDPOINT>" -d <data> --user <AWS_ACCESS_KEY>:<AWS_SECRET_KEY> --aws-sigv4 "aws:amz:<REGION>:<SERVICE>"
$ curl -X POST "https://1234WXYZ.execute-api.us-east-1.amazonaws.com/stage/lambda_proxy" -d '{"x":"y"}' --user ABCD:1234 --aws-sigv4 "aws:amz:us-east-1:execute-api"