Generando una firma AWS Signature v4 para cargar a s3

Bien, estoy tratando de crear una firma aws v4 usandoesta plantilla de Amazon en javascript, con node.js. Estoy usando las credenciales, la región, la fecha y el servicio de la plantilla para probar mi función de firma.

Estoy usando el siguiente formato para generar mi firma:Enlace a imagen

My StringToSign es la política POST codificada en base64 de la plantilla:

eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9

Y mi clave de firma se genera utilizando el siguiente código adquirido de la plantilla de derivación de clave de la firma v4 de Amazon

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;
}

Mi clave es la SecretAccessKey de la plantilla vinculada anteriormente (wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY), mi fecha es "20151229", mi región es "us-east-1" y mi nombre de servicio es "s3"

Y finalmente, para obtener la salida que estoy usando

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

El resultado esperado del cálculo es:

46503978d3596de22955b4b18d6dfb1d54e8c5958727d5bdcd02cc1119c60fc9

Pero el resultado que obtengo es:

8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e

Si ve dónde me equivoqué, avíseme ya que creo que he seguido la plantilla de Amazon pero parece que he cometido un error en alguna parte

Respuestas a la pregunta(0)

Su respuesta a la pregunta