尝试使用签名版本4测试具有联合身份的API网关

时间:2018-08-19 21:09:56

标签: node.js postman aws-api-gateway amazon-cognito signature

我正在使用联合身份证明对后端AWS资源(即API网关)进行细粒度访问。我得到了临时身份,使用了联合身份以及会话令牌。现在,我尝试向签名版本为4的API网关发送一个示例GET请求。

STEP 1

创建了具有空有效负载的规范请求,因为它是GET请求,并转换为SHA 256哈希。

GET
/dev/table
content-type:application/x-www-form-urlencoded
host:xxxxxx.execute-api.ap-south-1.amazonaws.com
x-amz-date:20180819T195420Z

content-type;host;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

第2步

创建要签名的字符串

AWS4-HMAC-SHA256 \ n20180819T195420Z \ n20180819 / ap-south-1 / execute-api / aws4_request \ n Hashofstep1

第3步和第4步 计算签名密钥和最终签名。

var Crypto = require("crypto-js");

var dateStamp = '20180819';
var key = 'secret key';
var serviceName ='execute-api';
var regionName = 'ap-south-1';

var kDate = Crypto.HmacSHA256(dateStamp, "AWS4" + key);
var kRegion = Crypto.HmacSHA256(regionName, kDate);
var kService = Crypto.HmacSHA256(serviceName, kRegion);
var kSigning = Crypto.HmacSHA256("aws4_request", kService);

var a = 'AWS4-HMAC-SHA256\n20180819T195420Z\n20180819/ap-south-1/execute-api/aws4_request\n553d8cbd218461e821919ae80e3fcf4cb575da1e4ae35abdb355d9cfdb2322d0';
var c = Crypto.HmacSHA256(kSigning, a).toString()

console.log('sig ' + c);

第5步

保留授权标头中的最终签名。

Authorization: AWS4-HMAC-SHA256 Credential=ASIAR626FSMDLOA4JUOT/20180820/ap-south-1/execute-api/aws4_request, SignedHeaders=Content-Type;Host;X-Amz-Date, Signature=e91bbd26eb2dfd8e3bdc6c0ab6a9802ce5cda5582e3f6dcfda9627f1d23c3c30

这些是我在邮递员中配置的headers

但是我遇到这样的错误

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.

我在上述任何步骤中做错了什么吗?

谢谢 任何帮助表示赞赏。

0 个答案:

没有答案