7

Я разрабатываю код для salesforce. Мы используем приложение «Force.com для Amazon Web Services» от Appexchange. Приложение предоставлено Amazon.Amazon S3: Странная ошибка - «Иногда» SignatureDoesNotMatch, иногда это

Я загружаю файлы с Amazon S3 на машине.

Иногда я получаю указанную ниже ошибку. Интересно, только иногда я получаю эту ошибку, остальное время, когда она работает, даже для одного и того же файла.

<Error> 
<Code>SignatureDoesNotMatch</Code> 
<Message> 
The request signature we calculated does not match the signature you provided. Check your key and signing method. 
</Message> 

Я попытался использовать оба шаблона URL, предоставленные Amazon. Срок действия истекает в течение 1 часа после генерации ссылок, следовательно, может и не быть проблемой.

URL1:- http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ= 
URL2:- http://s3.amazonaws.com/adminportal/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372658253&Signature=%2FmI0m0PTlHJpJ%2FP5d%2FX3OApqzcI%3D 

Подпись вырабатывается классом, предоставляемым Amazon, я думаю, он должен хорошо работать все время.

Может кто-нибудь уточнить, почему S3 может дать эту ошибку только иногда?

ответ

10

Наконец-то я смог решить эту проблему, вот как?

Пример URL для файла на Amazon S3

это-
http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ= 

Здесь Signature порождается классами, предоставляемых Amazon.

По неизвестным причинам приложение Force.com для Amazon Web Services создало подпись, содержащую SPACES.

E.g. В данном URL-пространстве пространство заменяется на «+».

Чтобы избавиться от проблемы, просто введите URL-адрес подписи. Кодировка заменит пробелы специальным символом, и проблема будет решена.

+1

ты спас мой день! – Raeesaa

+1

Вы имеете в виду, что '+' заменят некоторые специальные символы. У меня есть этот код: 'var signature = crypto.createHmac ('sha1', AWS_SECRET_KEY) .update (put_request) .digest ('base64');' 'signature = encodeURIComponent (signature.trim());' ' signature = signature.replace ('% 2B', '+'); ' Должна ли последняя строка быть' signature = signature.replace ('+', '% 2B'); 'или она должна быть удалена? – vinit

+0

Я прошу вас, потому что очень сложно воссоздать тестовый пример, поэтому вам нужно было убедиться в этом. – vinit

0

Вы используете Java SDK? Какая версия?

Ошибка, появившаяся в версии 1.4.4, я думаю, и исправлена ​​в последних выпусках. Как только я обновился до багги, у меня были проблемы с прерывистой подписью при использовании SQS, и я видел сообщение на форумах AWS о некоторых людях, сообщающих о том же выпуске с DynamoDB. Теперь я обновился до версии 1.4.7, и ошибка исчезла.

Возможно, вы видите ту же ошибку!

+0

Я разрабатываю это на платформе Salesforce. Так что это не связано с вещью Java как таковой. –

+0

У меня такая же проблема, как и драйвер java. Я могу настроить два почти одинаковых теста и один работает, в то время как другой не работает одновременно на одном сервере. –

Смежные вопросы