Amazon MWS - рассчитанная подпись запроса не соответствует предоставленной подписи - PullRequest
65 голосов
/ 06 мая 2010

Получение следующего сообщения об ошибке от https://mws.amazonservices.com/:

<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
−
<Message>
The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
</Message>

Вот код VB.net, который я использую для расчета запроса. Из соображений безопасности я удалил SecretKey и AWSAccessKeyId.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim sURL As String = "https://mws.amazonservices.com/"

        Dim sRequest As String = ""
        sRequest &= "Acknowledged=" & Server.UrlEncode("false")
        sRequest &= "&Action=" & Server.UrlEncode("GetReportList")
        sRequest &= "&AWSAccessKeyId=" & Server.UrlEncode("REMOVED-FOR-SECURITY")
        sRequest &= "&Marketplace=" & Server.UrlEncode("REMOVED-FOR-SECURITY")
        sRequest &= "&Merchant=" & Server.UrlEncode("REMOVED-FOR-SECURITY")
        sRequest &= "&SignatureMethod=" & Server.UrlEncode("HmacSHA256")
        sRequest &= "&SignatureVersion=" & Server.UrlEncode("2")
        sRequest &= "&Timestamp=" & Server.UrlEncode(DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssCST"))
        sRequest &= "&Version=" & Server.UrlEncode("2009-01-01")

        Dim StringToSign As String = "GET\n" & "mws.amazonservices.com\n" & "/\n" & sRequest
        sRequest &= "&Signature=" & Server.UrlEncode(HashString(StringToSign))

        Response.Write("<a href=""" & sURL & "?" & sRequest & """>Click here</a>")

    End Sub

    Public Shared Function HashString(ByVal StringToHash As String) As String
        Dim myEncoder As New System.Text.UTF8Encoding
        Dim Key() As Byte = myEncoder.GetBytes("REMOVED-FOR-SECURITY")
        Dim XML() As Byte = myEncoder.GetBytes(StringToHash)
        Dim myHMACSHA256 As New System.Security.Cryptography.HMACSHA256(Key)
        Dim HashCode As Byte() = myHMACSHA256.ComputeHash(XML)
        Return Convert.ToBase64String(HashCode)
    End Function

Ответы [ 22 ]

1 голос
/ 28 декабря 2016

Я получал то же сообщение «Рассчитано не соответствует», когда моя ошибка была связана с настройкой моих ролей

Проверьте свои роли, политики и конфигурацию CORS для своего сегмента, чтобы убедиться, что у вас есть разрешение наиспользуйте заголовки, которые вы используете.

В моем случае я включил параметр

ACL: 'public-read' 

в подпись сегмента, а также

xhr.setRequestHeader('x-amz-acl', 'public-read');

в то время какзагрузка изображения.

Мне не хватало разрешения "s3: PutObjectAcl" в моем связанном пользователе Iam.Вот политика, которая сработала.

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "Stmt12345",
        "Effect": "Allow",
        "Action": [
            "s3:DeleteObject",
            "s3:GetObject",
            "s3:ListBucket",
            "s3:PutObject",
            "s3:PutObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::mybucketname/*"
        ],
        "Condition": {
            "StringEquals": {
                "s3:x-amz-acl": [
                    "public-read"
                ]
            }
        }
    }
  ]
}
0 голосов
/ 23 января 2017

После долгих усилий я использовал конструктор putObject для загрузки файла вместо inputtream, и это сработало. Не уверен, что не так.

0 голосов
/ 29 июля 2016

Проверьте заголовки вашего запроса, в моем случае я отправлял что-то дополнительный заголовок из кода, который я скопировал, вставил (как нуб), содержащий:

HOST: localhost:8080
0 голосов
/ 04 февраля 2016

Я использовал Ruby's aws-sdk v1 и получал эту ошибку, потому что я указывал content type при вызове url_for, следуя этому примеру на документах . Удаление параметра content_type на вызываемом url_for решило проблему для меня.

0 голосов
/ 29 июня 2016

Мы получали это на веб-сервере, но не в консольном приложении, использующем старую версию AWS C # SDK (1.5.10.0). Как только мы обновились до самой последней версии, она исчезла.

0 голосов
/ 12 января 2016

Я столкнулся с той же проблемой, используя команду curl для загрузки файла нулевого байта в предварительно назначенный URL-адрес S3.

Я нашел, когда удалить заголовок -H 'Content-Type: application/octet-stream' тогда может работать.

0 голосов
/ 11 марта 2014

Я столкнулся с этой проблемой, когда у меня был неправильный URL-адрес (иногда он выдавал эту ошибку, а иногда говорил, что ключ не может быть найден, что подразумевает ошибку 404). Эти URL-адреса чувствительны к регистру, поэтому убедитесь, что вы точно. У меня был ".jpg" в моем URL, и мне нужно ".JPG"

0 голосов
/ 29 июля 2015

Я получил ту же ошибку при вызове SubmitFeed, и после нескольких часов отладки оказалось, что CURL превратил мой запрос POST в запрос PUT , что сделало мою подпись недействительной .

Это очень помогло установить CURLINFO_HEADER_OUT в 1 с помощью curl_setopt (), поэтому более поздний вызов curl_getinfo () сказал, что мой запрос был запросом PUT.

Поэтому я сравнил параметры CURL в библиотеке Amazon PHP с тем, что я сделал с помощью curl_setopt () и tataa: библиотека Amazon PHP делает это:

curl_setopt(CURLINFO_HEADER_OUT, 'POST');

(или GET , в зависимости от self :: REQUEST_TYPE). Выполнение этого в моем собственном запросе CURL превратило запрос из PUT в POST, поэтому моя хешированная подпись снова осталась без изменений.

0 голосов
/ 16 декабря 2014

Я только что столкнулся с этой ошибкой. Я использую PHP и запустил scandir() в моем каталоге с моими файлами.

Функция scandir() вернула . и .. в качестве первых двух индексов массива. После добавления условного оператора, чтобы убедиться, что он не создает для них файл, он работает.

0 голосов
/ 12 июля 2017

PHP: у меня была проблема с тем, что при добавлении «/» для обозначения папки в s3 я добавлял ее к имени корзины, похоже, команда PUTOBJECT в aws-package заменила «/» на «% 2F», поэтому он не смог вычислить запрос sha256 как это могло бы выглядеть:
awsbucket% 2Ffolder / имя файла
но он, вероятно, сделал предварительный расчет ша с:
awsbucket / папка / имя файла

Решением было предварительно добавить имя папки вместо имени файла.

от
awsbucket / папка
Имя файла
чтобы:
awsbucket
папка / файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...