2010-11-29 4 views
2

J'écris un client de base pour accéder au service Amazon SimpleDB et j'ai de la difficulté à comprendre la logique derrière la signature de la requête.Signature SimpleDB HMAC

Voici un exemple de demande:

https://sdb.amazonaws.com/?Action=PutAttributes 
&DomainName=MyDomain 
&ItemName=Item123 
&Attribute.1.Name=Color&Attribute.1.Value=Blue 
&Attribute.2.Name=Size&Attribute.2.Value=Med 
&Attribute.3.Name=Price&Attribute.3.Value=0014.99 
&Version=2009-04-15 
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00 
&SignatureVersion=2 
&SignatureMethod=HmacSHA256 
&AWSAccessKeyId=<Your AWS Access Key ID> 
Following is the string to sign. 

Le message à signer:

GET\n 
sdb.amazonaws.com\n 
/\n 
AWSAccessKeyId=<Your AWS Access Key ID> 
&Action=PutAttributes 
&Attribute.1.Name=Color 
&Attribute.1.Value=Blue 
&Attribute.2.Name=Size 
&Attribute.2.Value=Med 
&Attribute.3.Name=Price 
&Attribute.3.Value=0014.99 
&DomainName=MyDomain 
&ItemName=Item123 
&SignatureMethod=HmacSHA256 
&SignatureVersion=2 
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00 
&Version=2009-04-15 

la demande qui suit est signé.

https://sdb.amazonaws.com/?Action=PutAttributes 
&DomainName=MyDomain 
&ItemName=Item123 
&Attribute.1.Name=Color&Attribute.1.Value=Blue 
&Attribute.2.Name=Size&Attribute.2.Value=Med 
&Attribute.3.Name=Price&Attribute.3.Value=0014.99 
&Version=2009-04-15 
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00 
&Signature=<URLEncode(Base64Encode(Signature))> 
&SignatureVersion=2 
&SignatureMethod=HmacSHA256 
&AWSAccessKeyId=<Your AWS Access Key ID> 

Ce que je ne comprends pas, c'est le message à signer. Pourquoi je ne comprends pas? bien, l'ordre des paramètres est tout changé entre la demande et le message à signer. Il apparaît dans l'exemple que les paramètres sont peut-être classés par ordre alphabétique. Est-ce que quelqu'un a joué avec SimpleDB pour me dire quelle est la logique derrière le message à signer, c'est-à-dire l'ordre des paramètres, etc. La documentation n'est pas très spécifique ici.

Répondre

1

Pour ceux qui lisent cette question plus tard, voici une citation de la section pertinente de la documentation. Cette section semble avoir disparu des documents SimpleDB mais est toujours présente dans les documents SQS. Cela s'applique toujours directement à SimpleDB.

Un problème majeur est que vous devez encoder correctement toutes les valeurs de paramètre HTTP.

  • Ne encode URL aucun des caractères non réservés que RFC 3986
    de définit. Ces caractères non réservés sont A-Z, a-z, 0-9, trait d'union (-), trait de soulignement (_), point (.) Et tilde (~). Pourcentage codent tous les autres caractères avec% XY, où X et Y sont des caractères hexadécimaux compris entre 0 et 9 et des majuscules A-F.

  • Pourcentage de codage étendu caractères UTF-8 sous la forme XY%% ZA

  • Pourcentage coder le caractère d'espace en% 20 (et non +, en tant que systèmes de codage commun ne).

Une erreur courante consiste à coder non le caractère astérisque (*) qui peuvent apparaître dans les deux valeurs de données et SelectExpressions.

+0

Notez que les encodeurs d'URL en ligne populaires ne codent pas non plus l'astérisque :. Voir, par exemple: meyerweb.com/eric/tools/dencoder et url-encode-decode.com. –

Questions connexes