Amazon web services AWS api网关在浏览器中工作,但在fiddler中返回502
我有一个lambda函数,它基本上可以根据aws secret manager中存储的密码进行身份验证。机密管理器路径将是用户名,它将具有密码值。需要在查询的标题和用户名中传递密码。当我在浏览器中访问urlAmazon web services AWS api网关在浏览器中工作,但在fiddler中返回502,amazon-web-services,aws-lambda,aws-api-gateway,fiddler,Amazon Web Services,Aws Lambda,Aws Api Gateway,Fiddler,我有一个lambda函数,它基本上可以根据aws secret manager中存储的密码进行身份验证。机密管理器路径将是用户名,它将具有密码值。需要在查询的标题和用户名中传递密码。当我在浏览器中访问urlhttps://{myawsurl}.execute api.{region}.amazonaws.com/demo/{username}时,我得到的错误是头中缺少密码(这是预期的)。当我使用fiddler点击url时,我总是得到502 我的api网关只是一个访问以下lambda函数的工具:
https://{myawsurl}.execute api.{region}.amazonaws.com/demo/{username}
时,我得到的错误是头中缺少密码(这是预期的)。当我使用fiddler点击url时,我总是得到502
我的api网关只是一个访问以下lambda函数的工具:
const aws = require("aws-sdk");
const sm = new aws.SecretsManager({ region: 'us-east-1' })
const getSecrets = async (SecretId) => {
return await new Promise((resolve, reject) => {
sm.getSecretValue({ SecretId }, (err, result) => {
if (err) {
reject(err);
}
else {
resolve(JSON.parse(result.SecretString));
}
});
});
}
const main = async (event) => {
console.log("Event: ", event);
try {
const username = event.queryStringParameters ? event.queryStringParameters.username : (event.pathParameters ? event.pathParameters.username : null);
if (username === null || username === undefined || username.trim().length === 0) {
if (username === null || username === undefined || username.trim().length === 0) {
return {
statusCode: 400,
headers: {
"Content-Type": "application/json"
},
body: "username is missing in the url. Please add `/?username={username}` or `/{username}` in the url"
};
}
}
const password = event.headers ? event.headers.password : null;
if (password === null || password === undefined || password.trim().length === 0) {
return {
statusCode: 400,
headers: {
"Content-Type": "application/json"
},
body: "password is missing in the header"
};
}
const secrets = await getSecrets(username);
if (password !== secrets.password) {
return {
statusCode: 403,
headers: {
"Content-Type": "application/json"
},
body: "Incorrect username/password"
};
}
return {
statusCode: 200,
headers: {
"Content-Type": "application/json"
},
body: "User is Authenticated"
};
} catch (e) {
return {
statusCode: 404,
headers: {
"Content-Type": "application/json"
},
body: e.message
};
}
}
exports.handler = main;
我的小提琴手请求如下:
GET https://{myawsurl}.execute-api.{region}.amazonaws.com/demo/{username} HTTP/1.1
password: MyTestPassword
我看到其他帖子,他们提到有一个状态码,身体是一个字符串。我有这些,但仍然得到错误
我在响应中添加/删除了标题:{“Content Type”:“application/json”},
,但没有任何区别
编辑:另一件需要注意的事情是,每当我通过浏览器访问api网关url时,它都会被记录到api的日志组中。但当使用fiddler访问它时,它不会记录日志。不知道为什么
编辑:在@ArunK的建议之后,我使用了Postman,发现它从api网关返回了预期的响应。我假设Fiddler中的某些设置可能导致这种情况发生。看起来问题与Fiddler支持的TLS版本有关。由于AWS API网关支持这些tls版本,因此需要包括tls 1.0和1.2 从: 安全策略是最低TLS版本的预定义组合 以及AmazonAPI网关提供的密码套件。你可以选择其中之一 TLS 1.2版或TLS 1.0版安全策略
转到
工具
->选项
->Https
并验证协议
-下是否存在以下内容;ssl3;tls1.0;tls1.1;tls1.2
更多信息。我觉得你的代码很完美。在邮递员中,您可以禁用
Accept Encoding
auto-generated header并查看其是否工作。我记得我在几分钟前玩过这个游戏。这很有趣。在Postman中,它返回200和响应主体。我不必做出上面@ArunK建议的改变。但fiddler仍然返回502…现在我记得,我从来没有使用邮递员进行过测试,尽管我说我在邮局做过。我只在Fiddler中进行了测试,即使现在也不起作用。在这一点上,我假设是某种设置或在fiddler中传递的附加头导致了这个问题。我将继续与邮递员。谢谢@ArunK。你的建议让我用邮递员。我已相应地更新了问题..转到工具->选项->Https
并验证协议下是否存在以下内容-;ssl3;tls1.0;tls1.1;tls1.2
@AmitBaranes:就是这样。你能把它作为一个答案,这样我就可以接受了吗?