mhart / aws4

Signs and prepares Node.js requests using AWS Signature Version 4
MIT License
703 stars 176 forks source link

Amazon SP-API - Works for everything except for POST #145

Open Landsailor opened 2 years ago

Landsailor commented 2 years ago

Hmmm, describing this may have been enough Duck Debugging to point me to where I need to go... :)

I am nowhere approaching a "JavaScript dev", so I set up a node-red server to handle various Amazon SP-API related duties. This might be an issue with my implementation, function code, or Amazon's Selling Partner API itself.

I created an endpoint that uses aws4 to generate the signature based on query data submitted via a GET, returns it, and is then used for requests in our server. It works for everything except POST requests. Those always return a similar "Close, but no cigar" message from Amazon: node-red AWS4 POST Signature Error

Here's the function where I have tried enabling and disabling various options to try to get it to work: node-red AWS4 Function Text They all return a result similar to the one shown.

When I run the identical request in Postman using the same credentials, it works. However, I noticed that Postman also generates a X-Amz-Content-Sha256 header which is not a hash of the just body text.

Any ideas here? Is there any way to get aws4 to return the Canonical Request and StringToSign for debugging purposes?

Thanks in advance!

tpietsc1 commented 1 year ago

I had a similar issue. I did not get an X-Amz-Content-Sha256 header although the body was provided before signing the request. To get this work provisionally I made a fork and added my service to this line: https://github.com/mhart/aws4/blob/a413aadd9e4b4e58842937a9ad53354be41ef4a1/aws4.js#L154

chyke007 commented 1 year ago

Having same issue, works on Postman

JBetts97 commented 1 year ago

Hi,

Did you find a solution to this? Is there another way of getting the X-Amz-Content-Sha256 header?

chyke007 commented 1 year ago

Yes, I did find a solution, I had to sign the body also: https://github.com/chyke007/facial-vote/blob/main/facial-vote-frontend/src/pages/api/vote.ts

JBetts97 commented 1 year ago

Perfect! - Thanks @chyke007 for the quick response! 👍🏻

Glad you found solution. I've also managed to resolve my issue and POST the request using AXIOS library: https://medium.com/@joshua.a.kahn/calling-amazon-api-gateway-authenticated-methods-with-axios-and-aws4-6eeda1aa8696