Missing Authentication Token
TL;DR — "Missing Authentication Token" 意味着请求要么没有携带凭证**,要么访问了一个 AWS 无法识别的端点/方法——对一个不存在的路径或不受支持的 HTTP 方法的请求会返回这个,而不是 404。对 DynamoDB 而言,它几乎总是一个错误的端点 URL,或者一个从未被签名的请求。**
含义
{"message":"Missing Authentication Token"}AWS 的 SigV4 排障指南对第一个原因直言不讳:如果 API 请求未签名,你可能会收到 Missing Authentication Token。有点反直觉的是,当路径或 HTTP 方法不匹配任何路由时,同样的消息也会从 API-Gateway 风格的端点返回(HTTP 403)——AWS 在一个它无法路由的请求上寻找认证,并报告缺失的 token 而不是"未找到"。当 DynamoDB 本身拒绝一个授权头缺失或格式错误的请求时,异常是 MissingAuthenticationTokenException——HTTP 400,不可重试,消息为 "Request must contain a valid (registered) AWS Access Key ID."。
为什么会发生
- 端点 URL 错误——在浏览器中或用一个普通的 GET 访问
https://dynamodb.<region>.amazonaws.com/some/path,而不是对服务根做一次正确签名的 SDK 调用。 - 未签名的请求——一个没有 SigV4
Authorization头的原始curl/fetch(SDK 通常会添加它)。 - HTTP 方法错误——DynamoDB 的 API 期望向
/发送POST,并带一个指明操作的X-Amz-Target头;其他形态不被识别为签名操作。 - 一个拼错的自定义端点——指向一个不对应 DynamoDB 服务的 URL。
- DynamoDB Local 未配置访问密钥——即使在本地,SDK 也要求设置访问密钥和区域值(任意值都行;Local 只用它们来命名其数据库文件)。
如何修复
- 使用 AWS SDK,而不是原始的 HTTP 调用。 让 SDK 用正确的
X-Amz-Target构建签名的POST——不要手工拼制 URL。 - 指向服务根(
https://dynamodb.<region>.amazonaws.com),而不是一个路径,并设置客户端的区域与之匹配。 - 确认凭证已配置,这样 SDK 才会真的对请求签名(环境变量、profile 或角色)。
- 对于 DynamoDB Local,把端点设为
http://localhost:8000并配置一个虚拟的访问密钥/密钥(只含字母和数字),这样 SDK 就正常签名——Local 不会验证它们。
相关错误
- Unable to locate credentials——SDK 根本没找到任何凭证。
- The security token included in the request is invalid——凭证存在但被拒绝。
- Could not connect to the endpoint URL——一个格式错误或不可达的端点。
- 学习:Connect to DynamoDB Local & LocalStack
References
- Troubleshoot Signature Version 4 signing for AWS API requests — IAM User Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Create a signed AWS API request — IAM User Guide
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。