为什么我从这里的示例中获取“签名”的不同值(我从中复制了值和算法步骤)?
输入:
var YourSecretAccessKey = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY';
var date = '20130524';
var signing_key = getSignatureKey(YourSecretAccessKey, date, 'us-east-1', 's3');
StringToSign: AWS4-HMAC-SHA256
20130524T000000Z
20130524/us-east-1/s3/aws4_request
3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04
var Signature = Crypto.HmacSHA256( signing_key, StringToSign );
输出
Signature: c4b97c8d906d49d5fb7a14479fc69b033cbf2d1b9bb67df6058ec8ab4714ee97
如您所见,签名结果与亚马逊的示例有所不同:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
Signature: aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404
也许我的getSignatureKey函数没有正确执行Hmac.Sha256函数?
function getSignatureKey(key, dateStamp, regionName, serviceName) {
var hs = Crypto.HmacSHA256;
var kSigning = hs(hs(hs(hs("AWS4" + YourSecretAccessKey,dateStamp),regionName),serviceName),"aws4_request");
return kSigning;
}
我得到了这个签名密钥,fwiw:
//signing_key: 582cf07cc7ea5cd0a5c0a1f6422cf32eef38fdae7a4073d17ba0195cbf5c85ce
该示例未显示signing_key结果,因此我无法知道signing_key是否正确。我所知道的是,结果签名与示例结果不同。
示例网址结果将提供“请求已过期”,这是预期的,但在使用当前日期时,我会获得SignatureDoesNotMatch。
签名一代出了问题。
感谢您的帮助!