Мы используем aws-api-gateway-client
для выполнения всех API aws-rest. Код ниже работал нормально, пока мы не обновили наш сервер с window 2008
до window 2016
.
В новом Window Server 2016 приведенный ниже код отлично работает для методов GET / Delete
, но для метода POST
не работает. Пожалуйста, смотрите ошибку ответа ниже.
Версия пакета Windows 2016 — [email protected]
Версия пакета Windows 2008 — [email protected]
Кто-нибудь сталкивался с подобной проблемой после обновления?
/* ****************************************************************************************************************************************************************************
API NAME : Invoke AWS REST API using node js
Library Used: aws-api-gateway-client
Date : 1/18/2019
Owner: #######
******************************************************************************************************************************************************************************** */
var apigClientFactory = require('aws-api-gateway-client').default;
process.argv.splice(0, 2)
let command = JSON.parse(process.argv.join(" ").split('\\').join('') || '{}');
var output = {};
process.on("exit", function() {
printOutput();
});
var apigClient = apigClientFactory.newClient({
invokeUrl: command.endpoint, // REQUIRED
accessKey: command.access_key, // REQUIRED
secretKey: command.secret_key, // REQUIRED
region: command.region, // REQUIRED: The region where the AapiKeyloyed.
retries: 4,
retryCondition: (err) => { // OPTIONAL: Callback to further control if request should be retried. Uses axon-retry plugin.
return err.response && err.response.status === 500;
}
});
var pathParams = command.pathParams;
var pathTemplate = command.pathTemplate; // '/api/v1/sites'
var method = command.method; // 'POST';
var additionalParams = command.additionalParams; //queryParams & Headers if any
var body = command.body;
apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body)
.then(function(result) {
var statuscode = result.status;
var statustext = result.statusText;
var job_id = result.headers['location'];
var responseBody = result.data;
output.statuscode = statuscode,
output.statustext = statustext,
output.job_id = job_id,
output.responseBody = responseBody;
//output.result = result;
}).catch(function(error) {
if (error.response != undefined) {
var statuscode = error.response.status;
var statustext = error.response.statusText;
var responseBody = error.response.data;
output.statuscode = statuscode,
output.statustext = statustext,
output.responseBody = responseBody;
//output.response = error;
} else {
var statuscode = error.code;
var statustext = error.errno;
output.statuscode = statuscode;
output.statustext = statustext;
//output.error = error;
}
});
function printOutput() {
console.log(JSON.stringify(output));
}
Ошибка ответа
{"statuscode":403,"statustext":"Forbidden","responseBody":{"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.\n\nThe Canonical String for this request should have been\n'POST\n<>\n"}}