生成 AWS Signature v4 签名以上传到 s3

问题描述 投票:0回答:1

好吧,我正在尝试使用 来自 Amazon 的此模板 在 javascript 中使用 node.js 创建 aws v4 签名。我正在使用模板的凭据、区域、日期和服务来测试我的签名功能。

我使用以下格式来生成我的签名: Link to image

我的 StringToSign 是模板中的 base64 编码的 POST 策略:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

我的签名密钥是使用从亚马逊签名 v4 密钥派生模板获取的以下代码生成的

var crypto = require("crypto-js");

function getSignatureKey(Crypto, key, dateStamp, regionName, serviceName) {
var kDate = Crypto.HmacSHA256(dateStamp, "AWS4" + key);
var kRegion = Crypto.HmacSHA256(regionName, kDate);
var kService = Crypto.HmacSHA256(serviceName, kRegion);
var kSigning = Crypto.HmacSHA256("aws4_request", kService);
return kSigning;
}

我的密钥是上面链接的模板中的 SecretAccessKey (wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) ,我的日期是“20151229”,我的区域是“us-east-1”,我的服务名称是“s3”

最后,为了获得我正在使用的输出

var signature = cryptojs.HmacSHA256(stringToSign, signingKey).toString()

计算的预期输出为:

46503978d3596de22955b4b18d6dfb1d54e8c5958727d5bdcd02cc1119c60fc9

但是我得到的输出是:

8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e

如果您看到我哪里出错了,请告诉我,因为我认为我遵循了亚马逊的模板,但似乎我在某个地方犯了错误

javascript amazon-web-services encryption amazon-s3 cryptography
1个回答
1
投票

提出此问题时,AWS 文档的签名值不正确。所以这个方法并没有什么问题。 AWS 后来修复了它。您现在可以在文档中看到以下内容:

使用示例凭证创建签名,签名值如下(签名计算时,日期与策略中的

x-amz-date
相同(20151229):

8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e

这也是正确的值。

© www.soinside.com 2019 - 2024. All rights reserved.