我正在浏览亚马逊产品广告API REST signature docs而我被困在#8
使用上面的字符串和我们的“虚拟”秘密访问密钥:1234567890,使用SHA256哈希算法计算符合RFC 2104的HMAC。有关此步骤的更多信息,请参阅编程语言的文档和代码示例。
没关系,设法在Calculating a SHA hash with a string + secret key in python的帮助下再试一次。将在下面发表答案。
答案 0 :(得分:15)
以下内容创建了正确的签名:
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)
答案 1 :(得分:2)
添加到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
答案 2 :(得分:0)
您可以使用cryptoJs与您的秘密访问密钥一起计算密钥哈希消息认证代码(HMAC-SHA256)签名
首先通过键入
在系统中本地安装cryptoJsclass QuittanceRegister(forms.Form):
du=forms.DateField(required =True,widget=forms.widgets.DateInput(attrs= {'type': 'date'}))
au=forms.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))
要在全局安装它,请在上述命令的节点上加上-g标志。然后添加此代码并运行它。
npm install crypto-js