Amazon MWS - demande de signature calculée ne correspond pas à la signature
Obtenir le message d'erreur suivant 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>
Ici est la VB.net le code je l'utilise pour calculer la demande. J'ai supprimé les SecretKey et AWSAccessKeyId pour des raisons de sécurité.
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
- son Amazon AWS ou MWS?
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'atterrissage ici à partir de Google après avoir commencé à travailler à travers certains de l'Amazonie, de la documentation, il est très probable que vous avez vu la demande de signature d'erreur ci-dessus en raison d'une inadvertance en tête ou en queue de l'espace sur votre clé d'accès secrète. Vérification que le premier!
Dans mon expérience, cette erreur signifie simplement "Un de vos paramètres est faux, le bien de la chance de le trouver!" Je suis tombé sur cette erreur à l'aide de la S3 SDK. J'ai essayé de télécharger un fichier, mais j'ai malencontreusement fourni le chemin complet du fichier ("C:\Users\addaone\image.png") comme la Clé au lieu de simplement le nom de fichier.
Je suis tombé sur ce problème. Pour moi, c'est parce que j'ai accidentellement mis un /devant mon seau nom.
au lieu de test/foo/bar, j'ai eu /test/foo/bar pour mon seau nom.
La solution était de générer une nouvelle Clé d'Accès. Mon premier AWSSecretKey avait trailing slash qui étaient probablement à l'origine du problème, tandis que la nouvelle n'ont pas de barres obliques et travaillé.
J'ai trouvé ce parce que je ne faisais pas le codage d'URL - il semble que cette erreur est retournée si l'un des paramètres passés sont invalides - il peut n'avoir rien à faire avec la clé d'accès.
Similaire réponse à Andrew (accepté de répondre), mais ma espaces n'étaient pas sur les touches, mais sur les métadonnées pour un S3 téléchargement:
Pile d'appel ici:
Une autre chose à vérifier est que chacun de vos paramètres doivent être triés par valeur ASCII. "AWSAccessKeyId" paramètre doit venir avant le "Marché", mais "des AssociatedTag" devrait venir après "AWSAccessId".
J'ai couru dans le même message d'erreur lors de l'utilisation de WebClient pour télécharger un fichier sur un Amazon 3S url.
J'ai blogué à ce sujet ici:
http://blog.cdeutsch.com/2010/11/net-webclient-403-forbidden-error.html
La dernière solution que j'ai utilisée a été trouvé ici:
Obtenir une URL avec l'url-encodé slash
Le mien était parce que j'ai copié les variables d'environnement de quelqu'un, mais ils ont juste eu le texte de l'espace réservé. Ah!
C'est aussi rencontrées lorsque l'on cherche à télécharger un fichier de zéro octet. J'ai ouvert un bug ici aujourd'hui.
J'ai fait le même "calculé ne correspond pas' message lors de mon erreur a été liée à la façon dont mes rôles ont été configurés
Vérifier vos rôles, des politiques et des CORS de configuration pour votre seau pour être sûr que vous avez la permission d'utiliser les en-têtes que vous utilisez.
Dans mon cas, j'avais été y compris le
paramètre en signant le seau ainsi que
pendant le chargement de l'image.
Me manquait le "s3:PutObjectAcl", l'autorisation dans mon associé utilisateur Iam. Ici, c'est une politique qui a fonctionné.
J'ai rencontré ce problème quand j'ai eu une mauvaise URL (il m'a donné cette erreur, et parfois, il dit qu'ils pourrait pas être trouvé, ce qui implique une erreur 404). Ces URL sont sensibles à la casse, alors assurez-vous d'être exacte. J'ai eu ".jpg" dans mon URL, et nécessaire ".JPG"
Je viens de tomber sur cette erreur. Je suis à l'aide de PHP, et a couru un
scandir()
sur mon annuaire avec mes fichiers.La
scandir()
fonction renvoyée.
et..
comme les deux premiers indices de la matrice. Après l'ajout d'une instruction conditionnelle pour être sûr qu'il n'est pas de créer un fichier pour la ces, il a travaillé.Ce problème peut se produire pour les utilisateurs qui ont placé l'IAM de l'utilisateur "Mot de passe" dans la CLI au lieu de "Privées de Clé d'Accès". Où est le "Privé de la Clé d'Accès", vous pouvez demander? Vous ne pourrez pas le récupérer, mais vous pouvez en créer un nouveau via:
J'ai eu la même erreur avec un SubmitFeed appel, et après de nombreuses heures de débogage, il s'est avéré que CURL tourné mon POST demande dans une METTRE demande, ce qui a fait ma signature non valide.
Il a beaucoup aidé à définir CURLINFO_HEADER_OUT à 1 par l'intermédiaire d'curl_setopt(), de sorte qu'un appel ultérieur à curl_getinfo() dit que ma demande était une requête PUT.
Donc, j'ai comparé le CURL options dans Amazon bibliothèque PHP pour ce que j'ai fait via curl_setopt(), et tataa: le Amazon bibliothèque PHP fait ceci:
(ou OBTENIR, selon self::REQUEST_TYPE). Faire de même dans ma propre demande CURL tourné la demande de mise à la POSTE, donc mon haché signature était intact à nouveau.
J'ai couru dans la même question en utilisant
curl
commande pour télécharger un fichier de zéro octet de S3 presigned url.J'ai trouvé lors de supprimer l'en-tête
-H 'Content-Type: application/octet-stream'
alors peut travailler.J'ai été en utilisant Ruby aws sdk v1 et j'avais cette erreur parce que j'étais en précisant le
content type
lors de l'appel deurl_for
, à la suite de cet exemple sur les docs. Retrait de lacontent_type
paramètre sur laurl_for
appelé résolu le problème pour moi.Que nous recevions ce sur un serveur web, mais pas dans une application console en utilisant une ancienne version de l'AWS SDK de C# (1.5.10.0). Une fois que nous avons mis à jour la plus récente, il s'en alla.
Vérifier vos en-têtes de requête, dans mon cas, j'ai été l'envoi d'un en-tête supplémentaire formulaire le code que j'ai copier collé (comme un noob) contenant:
Après beaucoup de lutte, j'ai utilisé le putObject Constructeur pour télécharger le Fichier au lieu de inputstream et cela a fonctionné.
Pas sûr de ce qui est mal.
PHP: j'ai eu des problème lors de l'ajout d'un "/" pour désigner un dossier dans s3, j'ai été l'ajoutant au nom de bucket, il semble que le PUTOBJECT commande de aws-forfait de remplacement de "/" par "%2F", de sorte qu'il a échoué sha256 calcul de la demande comme il pourrait ressembler à:
awsbucket%2Ffolder/filename
mais il n'a probablement un pré-calcul de la sha:
awsbucket/dossier/nom de fichier
Solution était de pré-ajouter le nom du dossier nom de fichier à la place.
à partir de:
awsbucket/dossier
nom de fichier
de:
awsbucket
dossier/nom de fichier
J'ai rencontré ce problème à l'aide de
.net core 2.1.300-preview1
ainsi. La mise à jour de 2.1.300-rc1 est la solution.