Amazon web services AWS api网关在浏览器中工作,但在fiddler中返回502

Amazon 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函数的工具:

我有一个lambda函数,它基本上可以根据aws secret manager中存储的密码进行身份验证。机密管理器路径将是用户名,它将具有密码值。需要在查询的标题和用户名中传递密码。当我在浏览器中访问url
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:就是这样。你能把它作为一个答案,这样我就可以接受了吗?