Не удалось сгенерировать правильную подпись AWS в скрипте Google App - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь получить доступ к сервису распознавания изображений AWS с помощью google-App-script, для этого я пытаюсь сгенерировать подпись AWS для вызова API, но в ответе отображается сообщение об ошибке.

{"__type":"InvalidSignatureException","message":"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."}

когда я пытаюсь с почтальоном, используя авторизацию (подпись AWS), он работает нормально.

ниже приведен код моего скрипта приложения Google, в котором я вызываю основную функцию

function main(){
    var headers=AwsHeader_('ListCollections');

  var t=UrlFetchApp.fetch("https://rekognition.us-east-1.amazonaws.com", {
      method: "POST",
      muteHttpExceptions:true,
    headers:headers
    });

  Logger.log("======>>"+t);
}


function hexSignature(signature){
    var signatureStr = '';
  Logger.log(signature.length);

    for (i = 0; i < signature.length; i++) {
      var byte = signature[i];
      Logger.log("byte"+byte);
      if (byte < 0)
        byte += 256;
      var byteStr = byte.toString(16);
      // Ensure we have 2 chars in our byte, pad with 0
      if (byteStr.length == 1) byteStr = '0'+byteStr;
      signatureStr += byteStr;

      Logger.log("signatureStr"+signatureStr);
    }  
  return signatureStr;
}


function get_signature(datestamp){

  var secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  var region="us-east-1";
  var service="rekognition";


  var kdate = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, datestamp, "AWS4"+secret);
  var kregion = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, region, kdate);
  var kservice = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, service, kregion);
  var ksigning = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_256, "aws4_request", kservice);

  var signature=hexSignature(ksigning);
  return signature;

}

function AwsHeader_(service){

  var header={};
  var date=new Date();

  var formattedDate = Utilities.formatDate(date, "GMT", "yyyyMMdd'T'HHmmss'Z'");
  var onlydate=Utilities.formatDate(date, "GMT", "yyyyMMdd")


  var sign=get_signature(onlydate);

  header['Authorization']="AWS4-HMAC-SHA256 Credential=XXXXXXXXXX/"+onlydate+"/us-east-1/rekognition/aws4_request, SignedHeaders=cache-control;content-length;content-type;host;postman-token;x-amz-date;x-amz-target, Signature="+sign;
  header['X-Amz-Date']=formattedDate;
  header['Content-Type']="application/x-amz-json-1.1";
  header['X-Amz-Target']="RekognitionService."+service;
    return header;
}



Я не могу понять, что я делаю неправильно в коде, или это неправильный метод генерации подписи, пожалуйста, помогите.

...