Это ответ, который я получаю: рассчитанная нами подпись запроса не соответствует предоставленной вами подписи.
Вот код, который я использую для генерации подписи:
static byte[] HmacSHA256(String data, byte[] key)
{
String algorithm = "HmacSHA256";
KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create(algorithm);
kha.Key = key;
return kha.ComputeHash(Encoding.UTF8.GetBytes(data));
}
static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName)
{
byte[] kSecret = Encoding.UTF8.GetBytes(("AWS4" + key).ToCharArray());
byte[] kDate = HmacSHA256(dateStamp, kSecret);
byte[] kRegion = HmacSHA256(regionName, kDate);
byte[] kService = HmacSHA256(serviceName, kRegion);
byte[] kSigning = HmacSHA256("aws4_request", kService);
return kSigning;
}
Когда я использую настройки теста Amazon, я получаю правильную подпись
key = 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'
dateStamp = '20120215'
regionName = 'us-east-1'
serviceName = 'iam'
Однако, когда я добавляю свои живые настройки, я получаю ошибку, которая не соответствует.
Вот что я использую, чтобы получить свою подпись:
var reqSig = getSignatureKey("[my secret key]", dateStamp, "us-west-2","AWSECommerceService");
Это то, что я отправляю (сейчас я просто проверяю это в браузере):
ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=[my
access key that corresponds with the secret
key]&Operation=ItemLookup&IdType=UPC&ItemId=635753490879&Timestamp=2019-01-24T19:14:55.2644840Z&Signature=32BA07ECE67F3177BF2EA02923E624D612A45FAA144ED0E43BDDC0DF6574EAC3
Я не уверен, имеет ли это отношение к региону - us-west-2 в моем случае - потому что нет места для запроса о регионе. Я не уверен, как Amazon может проверить мою подпись по моим параметрам, если я не могу указать, какой это регион, и я использовал регион для вычисления подписи.
Что мне не хватает?