AWS AppSync Lambda authoriser always results in "Error: Request failed with status code 401"
AWS AppSync Lambda authoriser always results in "Error: Request failed with status code 401"
我目前正在尝试使用 AWS AppSync,我正在尝试使用 Lambda 授权者功能为 GraphQL API.
执行一些自定义身份验证
我使用正确的基于资源的策略设置了 Lambda 函数,以允许 AppSync 调用该函数,并且我将 AppSync 的 Default authorization mode
设置为调用我的 Lambda。
这是我的 lambda 代码:
exports.handler = (event) => {
console.log(JSON.stringify(event));
const response = {
isAuthorized: true,
};
console.log(JSON.stringify(response));
return response;
};
现在我面临的问题是,当我尝试 运行 GraphQL 采石场时,Lambda 授权者总是给我以下错误:
Error: Request failed with status code 401
这个问题调试了两个小时后,我可以说一下:
- GraphQL 端点工作正常,因为如果我将
Default authorization mode
设置为 API key
或 Amazon cognito user pool
而不更改任何其他内容,我的查询将成功执行。
- 每当我向 API 发出请求时,肯定会调用 lambda 函数,并且 lambda 也会从 AppSync 接收到正确的事件。
- Lambda returns
{"isAuthorized":true}
这意味着没有 Authorization Token
会导致 401
.
据我所知,一切都应该如此,但无论我做什么,我仍然得到 401
,我感到非常沮丧。
经过一些非常令人沮丧的调试后,我终于发现问题出在 Lambda 处理程序函数上。事实证明,Node.js lambda 处理程序应该是异步的。
因此将 lambda 更改为以下代码可以解决问题:
exports.handler = async (event) => {
console.log(JSON.stringify(event));
const response = {
isAuthorized: true,
};
console.log(JSON.stringify(response));
return response;
};
我不知道这一点,因为直到没有我只对 Lambda 使用 Python,而且问题很难发现,因为 console.log
仍然 运行 正确所以我虽然函数返回了正确的数据,但实际上它返回了 null
.
我目前正在尝试使用 AWS AppSync,我正在尝试使用 Lambda 授权者功能为 GraphQL API.
执行一些自定义身份验证我使用正确的基于资源的策略设置了 Lambda 函数,以允许 AppSync 调用该函数,并且我将 AppSync 的 Default authorization mode
设置为调用我的 Lambda。
这是我的 lambda 代码:
exports.handler = (event) => {
console.log(JSON.stringify(event));
const response = {
isAuthorized: true,
};
console.log(JSON.stringify(response));
return response;
};
现在我面临的问题是,当我尝试 运行 GraphQL 采石场时,Lambda 授权者总是给我以下错误:
Error: Request failed with status code 401
这个问题调试了两个小时后,我可以说一下:
- GraphQL 端点工作正常,因为如果我将
Default authorization mode
设置为API key
或Amazon cognito user pool
而不更改任何其他内容,我的查询将成功执行。 - 每当我向 API 发出请求时,肯定会调用 lambda 函数,并且 lambda 也会从 AppSync 接收到正确的事件。
- Lambda returns
{"isAuthorized":true}
这意味着没有Authorization Token
会导致401
.
据我所知,一切都应该如此,但无论我做什么,我仍然得到 401
,我感到非常沮丧。
经过一些非常令人沮丧的调试后,我终于发现问题出在 Lambda 处理程序函数上。事实证明,Node.js lambda 处理程序应该是异步的。
因此将 lambda 更改为以下代码可以解决问题:
exports.handler = async (event) => {
console.log(JSON.stringify(event));
const response = {
isAuthorized: true,
};
console.log(JSON.stringify(response));
return response;
};
我不知道这一点,因为直到没有我只对 Lambda 使用 Python,而且问题很难发现,因为 console.log
仍然 运行 正确所以我虽然函数返回了正确的数据,但实际上它返回了 null
.