PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Webservice rest Amazon - signature
Webservice rest Amazon - signature
Débuté par Mike, 01 nov. 2017 10:51 - 6 réponses
Membre enregistré
11 messages
Posté le 01 novembre 2017 - 10:51
Bonjour à tous,

Pour mon projet je vais avoir besoin de consommer le webservice rest d'amazon et pour se faire Amazon demande de signer chaque requête envoyée.

J'ai donc une chaîne à signer, puis à insérer dans ma requête de type Rest.

La chaîne à signer doit être hashée (HMAC-SHA256) puis encodé en base64.

Rien de très compliqué à priori, sauf que je n'obtiens pas le résultat souhaité sur windev ou webdev.

Je précise que j'obtiens le bon résultat avec du javascript pur avec :
-https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/hmac-sha256.js
-https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/enc-base64.js


Amazon fourni une chaîne exemple à signer :
[
GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01
]

Clé secrète de hashage :
1234567890

Le résultat doit être celui-ci :
"j7bZM0LXZ9eXeZruTqWm2DIvDYVUU3wxPPpp+iXxzQc="


Le but étant d'utiliser uniquement les fonctions Windev dans la mesure du possible.


Help ! Merci pour votre aide.


Mike
Membre enregistré
11 messages
Posté le 02 novembre 2017 - 16:04
UP
Posté le 03 novembre 2017 - 06:39
Bonjour,

Les fonctions de hachage du Wlangage ne renvoient pas des valeurs hexadécimales.

As-tu donc pensé à hasher, convertir le résultat en hexadécimal puis convertir en Base 64?
Membre enregistré
352 messages
Popularité : +12 (18 votes)
Posté le 03 novembre 2017 - 10:50
Bonjour, pourrait-on voir votre code?
Membre enregistré
11 messages
Posté le 04 novembre 2017 - 10:12
Bonjour et merci de votre aide, oui Franck j'avais converti le resultat de la fonction hash en hexa.

Voici mon code :

bufSignature est une Buffer
sSignature,sSignatureHexa, sSignatureBase64 sont des chaînes

sSignature = "GET\nwebservices.amazon.com\n/onca/xml\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01"

bufSignature = HashChaîne(HA_HMAC_SHA_256,sSignature)

sSignatureHexa = BufferVersHexa(bufSignature)

sSignatureBase64 = Encode(bufSignature,encodeBASE64)
Membre enregistré
11 messages
Posté le 04 novembre 2017 - 20:56
bufSignature est une Buffer
sSignature,sSignatureHexa, sSignatureBase64 sont des chaînes

sSignature = "GET\nwebservices.amazon.com\n/onca/xml\nAWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01"

bufSignature = HashChaîne(HA_HMAC_SHA_256,sSignature,"1234567890")

sSignatureHexa = BufferVersHexa(bufSignature)

sSignatureBase64 = Encode(bufSignature,encodeBASE64)
Posté le 10 juillet 2018 - 19:01
Bonjour

Je ne sais pas si ca peu aider :

MaChaineSource est une chaîne ="GET" + Caract(10) + ...
"webservices.amazon.com" + Caract(10) + ...
"/onca/xml"+Caract(10) +...
"AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&AssociateTag=mytag-20&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews&Service=AWSECommerceService&Timestamp=2014-08-18T12%3A00%3A00Z&Version=2013-08-01"
sHash1 est un Buffer = HashChaîne(HA_HMAC_SHA_256, MaChaineSource,"1234567890")


// affichage en base 64
Trace(Crypte(BufferVersHexa(sHash1),"",crypteAucun,encodeAucun) + RC + RC + Crypte(sHash1,"",crypteAucun,encodeBASE64))