我正在使用联合身份证明对后端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.
我在上述任何步骤中做错了什么吗?
谢谢 任何帮助表示赞赏。