我正在使用AWS Lambda和API Gateway为负载测试创建自定义端点。我已经上传了我在文件中的处理函数,以及zip中函数所需的节点模块,并根据说明正确设置了API网关API(与我以前的工作方式一致) ,但我一直收到错误:{“error”:“Missing Authentication Token”}。到目前为止,我在网上看到的所有内容都指出我使用POST请求传递的url无效,但我已经使用GET请求创建了类似的端点。据我所知,我已经正确设置了POST请求(使用Superagent),并且传入了一个有效的访问令牌,以及作为URL一部分的硬编码参数(有效参数)。
// Dependencies
var request = require('superagent');
var sync = require('synchronize');
exports.handler = function(event, context) {
sync.fiber(function() {
// Grabs params passed into the URL as a JSON object
var querystring = (event.querystring);
// Replaces params with an updated version which includes a single quotation
var queryStringUpdate = querystring.replace(/=/g, ":").replace(/}/g, "'}").replace(/:/g, ":'").replace(/,/g, "',");
// Updates the param information and sets it as a new string
eval('var queryString2 =' + queryStringUpdate);
// Define specific query params to be used in the REST calls
var userId = (queryString2.userId === undefined ? '229969' : queryString2.userId);
var roomdId = (queryString2.roomId === undefined ? '4' : queryString2.roomId);
var inviterId = (queryString2.inviterId === undefined ? '212733' : queryString2.inviterId);
var createInvitePost = function() {
request
.post('https://some_url/v2/invites/212733/create')
.set({'access-token': 'some_access_token'})
.set('Content-Type', 'application/json')
.query({user_id: "229969"})
.query({room_jid: "4"})
.end(function(err, res){
if (err) {
context.fail("Uh oh, something went wrong");
} else {
context.done(null, "Hurray, it worked!!");
}
});
};
try {
createInvitePost();
} catch(errOne) {
alert("No bueno!!");
}
});
};
对此有何看法?感谢
答案 0 :(得分:0)
当我错过了API所需的部分网址时,我通常会收到此错误。在过去,它可能是阶段的名称,拼写错误的资源名称或缺少Path参数。
答案 1 :(得分:0)
我来自Api Gateway团队。
正如其他人所说,你得到403响应的最常见原因是错误的路径/方法。我对Superagent并不熟悉,但如果您在Postman和cURL中运行相同的请求,那么如果您使用了错误的路径/方法,我会感到惊讶。
如果可能的话,也许还要查看有线日志,以确保您的查询字符串逻辑在'?'之前没有附加正斜杠。
要检查的一些事项:
您是否部署了最近的API更改?
舞台' v2' (我假设这个阶段)指向一个已部署的API版本,该版本的POST邀请/ 212733 / create?
' access-token'应该对Api网关层没有影响。如果您尝试使用原生Api Gateway Api Key,则标题为' x-api-key'。
杰克