Подпись не соответствует - API Amazon S3


Я использую класс PHP для Amazon S3 и CloudFront - Ссылка. Но когда я пытаюсь загрузить файл в корзину, я получаю следующую ошибку:

[SignatureDoesNotMatch] Подпись запроса, которую мы рассчитали, не соответствует предоставленной вами подписи. Проверьте свой ключ и способ подписи.

Как это исправить?

Спасибо.

Author: Roman Nazarkin, 2012-04-23

3 answers

Когда вы регистрируетесь в Amazon, вы можете создать себе пару ключей (Amazon называет их идентификатором ключа доступа и секретным ключом доступа).

Эти два используются для подписи запросов к веб-сервисам Amazon. Amazon повторно вычисляет подпись и сравнивает, соответствует ли она той, которая содержалась в вашем запросе. Таким образом, секретный ключ доступа никогда не нужно передавать по сети.

Если вы получите сообщение "Подпись не совпадает", весьма вероятно, что вы использовали неправильный секретный ключ доступа. Можете ли вы перепроверить ключ доступа и секретный ключ доступа, чтобы убедиться, что они верны?

 8
Author: awendt, 2012-05-03 13:55:24

Лично я получил эту ошибку из-за символов, которые были в моих метаданных.

Проблемным символом был символ "–", который является "\u2013" в юникоде и отличается от "-".

$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'Metadata' => [
        'name' => 'Terminology – Blah'
    ]
));

Примечание из документации http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata...

Amazon S3 хранит пользовательские метаданные в нижнем регистре. Каждое имя, значение пара должна соответствовать US-ASCII при использовании REST и UTF-8 при использовании Мыльные или браузерные загрузки по ПОЧТЕ.

 4
Author: Carlton, 2015-06-02 15:43:59

У меня была эта ошибка с putObject() при указании Key, начинающегося с символа косой черты (/) - после удаления косой черты он работал нормально.

 0
Author: Justin Emery, 2018-02-22 20:00:35