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 ]

142 голосов
/ 04 ноября 2011

Если вы попали сюда из Google после того, как начали работать с какой-то документацией Amazon, вполне вероятно, что вы видите ошибку «подписи запроса» выше из-за непреднамеренного начального или конечного пробела в вашем секретном ключе доступа. Проверьте это первым!

25 голосов
/ 21 мая 2014

По моему опыту, эта ошибка просто означает "Один из ваших параметров неверен, удачи в его поиске!" Я столкнулся с этой ошибкой, используя S3 SDK. Я пытался загрузить файл, но по ошибке указал полный путь к файлу («C: \ Users \ addaone \ image.png») в качестве ключа, а не просто имя файла.

19 голосов
/ 03 октября 2013

Я тоже столкнулся с этой проблемой. Для меня это потому, что я случайно поставил / перед именем своего ведра.

вместо test / foo / bar у меня было / test / foo / bar для названия моего сегмента.

18 голосов
/ 21 декабря 2013

Решением было сгенерировать новый ключ доступа.У моего первого AWSSecretKey были косые косые черты, которые, вероятно, вызывали проблему, в то время как у нового не было косых черт, и он работал.

16 голосов
/ 19 апреля 2012

Я нашел это, потому что я не делал кодировку URL - похоже, эта ошибка возвращается, если какой-либо из переданных параметров недопустим - это может не иметь никакого отношения к ключу доступа.

3 голосов
/ 25 сентября 2015

Аналогичный ответ Эндрю (принятый ответ), но мои пробелы были не на ключах, а на метаданных для загрузки S3:

using (AmazonS3Client client = new AmazonS3Client(region))
{
    PutObjectRequest putObjectRequest = new PutObjectRequest
    {
        ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256,
        InputStream = stream,
        BucketName = s3Bucket,
        Key = key,
        ContentType = "application/octet-stream",
        Timeout = TimeSpan.FromMinutes(60), //http timeout talking to S3, including upload time.
        ReadWriteTimeout = TimeSpan.FromMinutes(5) //timeout reading the input stream
    };
    if (!string.IsNullOrEmpty(fileName))
        putObjectRequest.Metadata.Add("Name", fileName); 
    PutObjectResponse putObjectResponse = client.PutObject(putObjectRequest);
    // Exception in client.PutObject if fileName has leading spaces in Metadata!
}           

Стек вызовов здесь:

The request signature we calculated does not match the signature you provided. Check your key and signing method.
at Amazon.Runtime.Internal.HttpErrorResponseExceptionHandler.HandleException(IExecutionContext executionContext, HttpErrorResponseException exception) in d:\Jenkins\jobs\v3-stage-release\workspace\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\ErrorHandler\HttpErrorResponseExceptionHandler.cs:line 116
at Amazon.Runtime.Internal.ExceptionHandler`1.Handle(IExecutionContext executionContext, Exception exception) in d:\Jenkins\jobs\v3-stage-release\workspace\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\Pipeline\ErrorHandler\ExceptionHandler.cs:line 38
[...]
at Amazon.Runtime.AmazonServiceClient.Invoke[TRequest,TResponse](TRequest request, IMarshaller`2 marshaller, ResponseUnmarshaller unmarshaller) in d:\Jenkins\jobs\v3-stage-release\workspace\AWSDotNetPublic\sdk\src\Core\Amazon.Runtime\AmazonServiceClient.cs:line 117
at Amazon.S3.AmazonS3Client.PutObject(PutObjectRequest request) in d:\Jenkins\jobs\v3-stage-release\workspace\AWSDotNetPublic\sdk\src\Services\S3\Generated\_bcl45\AmazonS3Client.cs:line 3646
at MoveDocumentDataToDisk.AwsRepository.PutObject(RegionEndpoint region, String s3Bucket, String key, String fileName, Stream stream) in C:\code\clarinetsupportfiles\MoveDocumentDataToDisk\MoveDocumentDataToDisk\Program.cs:line 314
2 голосов
/ 10 марта 2015

Еще одна вещь, которую нужно проверить, состоит в том, что каждый из ваших параметров, вероятно, должен быть отсортирован по значению ASCII. Параметр «AWSAccessKeyId» должен идти перед «Marketplace», однако «AssociatedTag» должен идти после «AWSAccessId».

1 голос
/ 04 ноября 2013

Мой был, потому что я скопировал переменные окружения от кого-то, но у них только был текст заполнителя. Хах!

1 голос
/ 28 апреля 2015

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

1 голос
/ 30 ноября 2010

Я столкнулся с тем же сообщением об ошибке при использовании WebClient для загрузки файла по URL-адресу Amazon 3S. Я написал об этом здесь: http://blog.cdeutsch.com/2010/11/net-webclient-403-forbidden-error.html

Окончательное решение, которое я использовал, было найдено здесь: ПОЛУЧЕНИЕ URL с косой чертой в кодировке

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