You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用EC2托管Web服务时返回Missing Authentication Token问题求助

排查AWS V4签名后返回"Missing Authentication Token"的问题

我之前也碰到过类似的情况,这个错误看似是没传认证令牌,但很多时候其实是签名过程中的细节没处理到位导致的。你可以从以下几个方面逐一排查:

  • 确认服务名称是否正确
    如果你调用的是部署在EC2上的API Gateway服务,serviceName应该设为execute-api,而不是ec2;只有直接调用EC2原生API时才用ec2。很多人会在这里搞错,直接导致签名不匹配。

  • 检查Canonical URI的准确性
    你代码里的canonicalURI只写了"e...",要确保它和实际请求的URI完全一致:

    • 比如实际请求路径是/api/v1/orders,那这里就要填完整的路径
    • 注意末尾的斜杠:如果请求的URI是/api/,签名时的URI也必须带斜杠,不能省略,反之亦然
  • 验证X-Amz-Date的格式和一致性

    • 必须严格遵循ISO8601格式:YYYYMMDD'T'HHMMSS'Z',比如20240520T143000Z
    • 签名时生成的X-Amz-Date值必须和请求头里传入的完全一致,而且当前时间和这个时间的差不能超过15分钟,AWS会直接拒绝超时的请求
  • 确保请求方法与签名配置一致
    你代码里设置的是POST,要确认实际发送的请求确实是POST方法,不能出现配置是POST但实际发GET的情况,这会直接导致签名失效。

  • 检查是否遗漏了关键请求头
    AWS V4签名需要把所有参与签名的请求头都纳入计算,最容易漏掉的是Host头。你需要确保在签名时把Host、X-Amz-Date等必要头加入到签名的headers列表中,并且请求时也带上这些头。

  • 处理POST请求的请求体(如果有)
    如果你的POST请求带有请求体,必须计算请求体的SHA256哈希值,并在生成签名时将这个哈希值包含到canonical request中。如果跳过这一步,签名会不匹配,AWS会返回认证错误。

  • 验证Authorization头的格式
    你生成的Authorization头应该符合这个格式:

    AWS4-HMAC-SHA256 Credential=AKIAXXXX/20240520/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=xxxxxx
    

    要检查:

    • Credential部分的日期(20240520)必须和X-Amz-Date的日期部分一致
    • 区域、服务名称必须和签名配置的一致
    • SignedHeaders必须包含所有参与签名的头,多个头用分号分隔,且全部小写

如果以上都排查过还是有问题,可以把完整的请求头、签名生成的关键参数(比如canonical request、string to sign)打印出来对比,看看哪一步和AWS的要求不一致。

内容的提问来源于stack exchange,提问作者deksos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:52:31