JavaScript AWS 客户端网关 API x-api-key 问题
JavaScript AWS Client gateway API x-api-key issue
我们正在 nodejs 服务器上使用 JavaScript AWS 客户端网关 API 调用 AWS REST API。我们发布了私有 vpc API,需要 API 输入 header。这是代码。
我在下面的脚本中硬编码 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' } }
问题现已解决。这不是 CORS 问题,而是 header 问题。我将附加参数中的密钥作为 header 标记传递,它按预期工作。
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;
});
我们正在 nodejs 服务器上使用 JavaScript AWS 客户端网关 API 调用 AWS REST API。我们发布了私有 vpc API,需要 API 输入 header。这是代码。 我在下面的脚本中硬编码 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' } }
问题现已解决。这不是 CORS 问题,而是 header 问题。我将附加参数中的密钥作为 header 标记传递,它按预期工作。
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;
});