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

请求Restricted Data Token时亚马逊返回‘String-to-Sign应为’错误如何调试?

关于返回的String-to-Sign的误解

亚马逊返回的待签名字符串并不是格式错误,只是报错输出时丢失了换行符。标准AWS V4签名的待签名字符串固定为4行结构,拼接后就是你看到的长串:

  • 第一行:签名算法 AWS4-HMAC-SHA256
  • 第二行:请求时间 20211201T141644Z
  • 第三行:凭证范围 20211201/eu-west-1/execute-api/aws4_request
  • 第四行:规范请求的SHA256哈希值 da72cd0eaab649d1219a0316d8a19360f10c2d9bb10fe716bc828fac408d2647
    你之前混淆了待签名字符串和最终请求携带的Authorization头的结构,二者是完全不同的两个概念,不存在格式异常。

核心错误点

从报错信息可以直接定位到2个核心问题:

  1. 请求方法错误:你使用了GET方法请求RDT端点,而/tokens/2021-03-01/restrictedDataToken端点要求必须使用POST方法,GET请求无法携带必填的请求体参数,直接触发签名校验失败。
  2. 请求体哈希计算错误:你报错信息里的规范请求哈希为e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,这是SHA256算法对空字符串的计算结果,说明你签名时使用了空请求体计算哈希,但RDT请求必须在POST body中携带restrictedResources等JSON参数,签名时需要用实际发送的请求体内容计算哈希。

调试步骤

按以下顺序排查即可解决问题:

  • 将请求方法改为POST,不要使用GET
  • 构造签名用的规范请求时,所有参数要和实际发送的请求完全一致:
    • 请求方法填POST,URI填/tokens/2021-03-01/restrictedDataToken
    • 计算请求体SHA256哈希时,使用实际发送的JSON序列化字符串,不要有多余的空格、换行或格式调整
    • 签名头列表(SignedHeaders)要包含所有实际请求携带的头,顺序和头名称大小写要完全匹配
  • 确认签名使用的凭证区域为eu-west-1,和欧盟端点的要求匹配
  • 确认LWA令牌的权限包含sellingpartnerapi::migration:tokens scope,无权限也会触发签名类错误误导排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:03