我正在尝试发出 Amazon Selling Partner API Restricted Data Token 请求,但收到错误消息并附有解释:
'GET/tokens/2021-03-01/restrictedDataToken
host:sellingpartnerapi-eu.amazon.com
x-amz-access-token:Atza|IwEBIKl_cR0g8tkcs-XR_6aoWu_4kPbRlBnW07MUCQkS5_I3nA716HJxM_A7TIjXb3oUkBMjw7Mqxq1kGsbTnajJvgBT2yisnu6AEuZvtEpSgCIih9S9-0NrnLWQT5IUlWuvzUiXmogfKZghVoT65b3_WWV29mxLyhL1yK61NylCrFQCa5vwzT4m2Tuoo6dIrE77Qf79cRzwpiLbaLP8fiM3XgqMVSiDt246BBYWkI-Rg0t2FatoQHseE0sYp4SPfWY4c-AZEtSFzejVPcQRTsLIgm1SWmwIojO6b-mpAOIW2MMj00Vy7AAs6WzrS2z9PqW2ecrKoH-p7BNnRuIE672ofmEc
x-amz-date:20211201T141644Zhost;
x-amz-access-token;
x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
'The String-to-Sign should have been'
AWS4-HMAC-SHA25620211201T141644Z20211201/eu-west-1/execute-api/aws4_requestda72cd0eaab649d1219a0316d8a19360f10c2d9bb10fe716bc828fac408d2647'
最后两行让我感到困惑,我的问题是关于它们:
'The String-to-Sign should have been'
AWS4-HMAC-SHA25620211201T141644Z20211201/eu-west-1/execute-api/aws4_requestda72cd0eaab649d1219a0316d8a19360f10c2d9bb10fe716bc828fac408d2647'
我试图理解所提供的String-to-Sign
内容,我的理解是亚马逊在此错误消息中返回完全混乱。奇怪的是:
亚马逊调用
AWS4-HMAC-SHA25620211201T141644Z20211201/eu-west-1/execute-api/aws4_requestda72cd0eaab649d1219a0316d8a19360f10c2d9bb10fe716bc828fac408d2647
但它已经包含签名(da72cd0eaab649d1219a0316d8a19360f10c2d9bb10fe716bc828fac408d2647
在这种情况下);这个字符串不是通常的格式
header-name:value
,例如我的字符串签名是非常清晰的结构:Authorization=AWS4-HMAC-SHA256 Credential=<PRIVATE_INFORMATION>/20211201/eu-west-1/execute-api/aws4_request, SignedHeaders=host;x-amz-access-token;x-amz-date, Signature=aaab78223b9f6ba2ce7466bc134b1976dcb28efd0b60c80dec6884a
亚马逊
String-to-sign
不包含凭证/AWSKey,因此任何人都可以制作。Amazon
String-to-sign
不包含有关签名标头的信息,显然 Amazon 在 RDT 请求中假定了确切的格式(标头的数量和类型),与灵活性的奇怪偏差。
所以,我的理解是,String-to-Sign
亚马逊返回的示例是错误的,而不是我可以用来纠正我的服务的可靠提示。我已经String-to-Sign
在许多成功的 Amazon Selling Parnter API 请求(不需要 RDT)中使用了我的,并且 Amazon 本身在说(在https://github.com/amzn/ sell-partner-api-docs/issues/639 中):
向使用 LWA 令牌签名的 Tokens API 发出请求(构造普通 SP API 请求的方式)。将受限 API 路径和方法添加为请求正文参数的一部分。
正是我所做的:我只是更改了主机名并将受限资源的 JSON 序列化描述添加到此请求的正文中。签名过程没有变化。但亚马逊不接受这一点。