Проблема с x-api-ключом API-интерфейса клиентского шлюза JavaScript AWS - PullRequest
0 голосов
/ 12 марта 2019

Мы вызываем AWS REST API, используя JavaScript AWS Client Gateway API на сервере nodejs.У нас есть частный API, опубликованный на vpc, который требует API Key в заголовке.Вот кодУ меня есть жесткий API-ключ для тестирования в приведенном ниже сценарии.

    var apigClientFactory = require('aws-api-gateway-client').default;
let awsbody = JSON.parse(process.argv[2].split('\\').join('') || '{}');

var apigClient = apigClientFactory.newClient({
    invokeUrl: awsbody.endPoint, // REQUIRED
    accessKey: awsbody.awsAccessKey, // REQUIRED
    secretKey: awsbody.awsSecreteKey, // REQUIRED
    region: awsbody.awsRegion,
    apiKey: 'vs2i50xvo4',
    retryCondition: (err) => { 
        return err.response && err.response.status === 500;
    }
});

var pathParams = awsbody.awsPathParams;

var pathTemplate = awsbody.awsPathTemplate; // '/api/v1/sites'
var method = awsbody.method; // 'POST';
var additionalParams = { queryParams: awsbody.awsAdditionalParams }; //queryParams if any
//var additionalParams = {};

var body = awsbody.requestBody;
var output = {};


apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body)
    .then(function(result) {
        // return JSON.parse(result.data);
        output.status = result.response.data.status,
            output.message = result.response.data.message,
            output.responsecode = result.response.status,
            output.responsetext = result.response.statusText;
        output.header = result.response.headers;
        console.log(output)

    }).catch(function(result) {

        output.status = result.response.data.status,
            output.message = result.response.data.message,
            output.responsecode = result.response.status,
            output.responsetext = result.response.statusText,
            output.header = result.response.headers;
        console.log(output)
            //console.log("********** Output **************")
            //console.log(result)
            //return result;
    });

При попытке выполнить код выдается ошибка ниже.Не уверен, если что-то не так в коде выше.

{ status: undefined,
  message: 'Forbidden',
  responsecode: 403,
  responsetext: 'Forbidden',
  header:
   { server: 'Server',
     date: 'Tue, 12 Mar 2019 00:00:37 GMT',
     'content-type': 'application/json',
     'content-length': '24',
     'x-amzn-requestid': 'ddce6604-4459-11e9-a23b-d1e9d6814b3a',
     'x-amzn-errortype': 'ForbiddenException',
     'x-amz-apigw-id': 'WZt53GORPHcFebA=',
     connection: 'close' } }

1 Ответ

0 голосов
/ 12 марта 2019

Проблема решена.Это была не проблема CORS, а проблема заголовка.Я передаю ключ в дополнительном параметре в качестве тега заголовка, и он работает как ожидалось.

 var apigClientFactory = require('aws-api-gateway-client').default;
let awsbody = JSON.parse(process.argv[2].split('\\').join('') || '{}');

var apigClient = apigClientFactory.newClient({
    invokeUrl: awsbody.endPoint, // REQUIRED
    accessKey: awsbody.awsAccessKey, // REQUIRED
    secretKey: awsbody.awsSecreteKey, // REQUIRED
    region: awsbody.awsRegion,
    retryCondition: (err) => { 
        return err.response && err.response.status === 500;
    }
});

var pathParams = awsbody.awsPathParams;

var pathTemplate = awsbody.awsPathTemplate; // '/api/v1/sites'
var method = awsbody.method; // 'POST';
var additionalParams = {headers: { "x-apigw-api-id": 'vs2i50xvo4'}};

var body = awsbody.requestBody;
var output = {};


apigClient.invokeApi(pathParams, pathTemplate, method, additionalParams, body)
    .then(function(result) {
        // return JSON.parse(result.data);
        output.status = result.response.data.status,
            output.message = result.response.data.message,
            output.responsecode = result.response.status,
            output.responsetext = result.response.statusText;
        output.header = result.response.headers;
        console.log(output)

    }).catch(function(result) {

        output.status = result.response.data.status,
            output.message = result.response.data.message,
            output.responsecode = result.response.status,
            output.responsetext = result.response.statusText,
            output.header = result.response.headers;
        console.log(output)
            //console.log("********** Output **************")
            //console.log(result)
            //return result;
    });
...