我正在浏览亚马逊产品广告 API REST 签名文档,但我被困在了 #8
使用上面的字符串和我们的“虚拟”秘密访问密钥:1234567890,使用 SHA256 哈希算法计算符合 RFC 2104 的 HMAC。有关此步骤的更多信息,请参阅您的编程语言的文档和代码示例。
没关系,在Calculating a SHA hash with a string + secret key in python的帮助下,设法再试一次。将在下面发布答案。
我正在浏览亚马逊产品广告 API REST 签名文档,但我被困在了 #8
使用上面的字符串和我们的“虚拟”秘密访问密钥:1234567890,使用 SHA256 哈希算法计算符合 RFC 2104 的 HMAC。有关此步骤的更多信息,请参阅您的编程语言的文档和代码示例。
没关系,在Calculating a SHA hash with a string + secret key in python的帮助下,设法再试一次。将在下面发布答案。
以下创建正确的签名:
require 'openssl'
secret_key = '1234567890'
query = 'AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06'
data = ['GET', 'ecs.amazonaws.com', '/onca/xml', query].join("\n")
sha256 = OpenSSL::Digest::SHA256.new
sig = OpenSSL::HMAC.digest(sha256, secret_key, data)
signature = Base64.encode64(sig)
添加到 AJcodez 答案:
我会做:
...
signature_raw = Base64.strict_encode64(sig)
signature = CGI::escape(signature_raw)
encode64
最后添加一个换行符,strict_encode64()
没有。
https://stackoverflow.com/a/2621023/2760406
亚马逊希望您“对签名中的加号 (+) 和等号 (=) 字符进行 URL 编码”#9 - 如果您不这样做,现在将无法使用。
http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html#rest_detailedexample
您可以使用 cryptoJs 使用您的秘密访问密钥计算密钥哈希消息身份验证代码 (HMAC-SHA256) 签名
首先通过键入在您的系统中本地安装cryptoJs
npm install crypto-js
要在全局范围内安装它,您可以将标志 -g 连接到上述命令。然后添加此代码并运行它。
var CryptoJS = require("crypto-js");
// Calculate an RFC 2104-compliant HMAC with the SHA256 hash algorithm
var exampleString =
"GET\n" +
"webservices.amazon.com\n" +
"/onca/xml\n" +
"AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01";
var signature = CryptoJS.HmacSHA256(exampleString, "1234567890");
console.log("test signature", signature.toString(CryptoJS.enc.Base64));