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

AWS API Gateway SigV4签名Python调用返回签名不匹配错误如何解决

错误原因

共4个问题导致签名校验失败:

  • 规范URI配置错误:AWS返回的正确规范请求中URI为/experiment-stage,但你的代码中canonical_uri被设置为/,签名计算用的路径和实际请求路径不匹配,是核心错误。
  • 规范请求头缺失必签字段:你在signed_headers中声明了需要对x-amz-content-sha256字段签名,但构建canonical_headers时没有加入该字段的键值对,导致签名计算的头部集合和实际提交的不一致。
  • 请求体双重序列化:json.dumps的入参已经是JSON字符串,会触发二次序列化,生成带转义符的异常请求体,导致载荷哈希计算错误。
  • 环境变量拼写错误:读取Secret Key的环境变量名AWS_SECRTE_ACCESS_KEY_API_INVOKE拼写错误,正确拼写为AWS_SECRET_ACCESS_KEY_API_INVOKE,可能导致读取到空密钥。
修复方案

按以下步骤修改代码即可:

  1. 调整载荷哈希的计算顺序,放在规范请求头构建之前
  2. 修正4处错误配置,修改后的核心代码段如下:
# 修正环境变量拼写
access_key = os.getenv('AWS_ACCESS_KEY_API_INVOKE')
secret_key = os.getenv('AWS_SECRET_ACCESS_KEY_API_INVOKE')

# 修正规范URI为实际请求的阶段路径
canonical_uri = "/experiment-stage"

# 修正请求体序列化,直接传入字典避免二次转义
request_parameters = json.dumps({"even" : [1,2,3,4], "odd" : [1,2,3,4]})

canonical_querystring = ""

# 提前计算载荷哈希,供规范请求头使用
payload_hash = hashlib.sha256(request_parameters.encode('utf-8')).hexdigest()

# 修正规范请求头,添加x-amz-content-sha256字段
canonical_headers = f"content-type:{content_type}\nhost:{host}\nx-amz-content-sha256:{payload_hash}\nx-amz-date:{amz_date}\n"

signed_headers = "host;x-amz-content-sha256;x-amz-date"

修改完成后重新运行即可正常通过签名校验。

内容的提问来源于stack exchange,提问作者Naveen Reddy Marthala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:18:03