我在使用 Lambda 配置 Hasura 身份验证挂钩时遇到了一些麻烦。出于安全原因,我需要这样的功能,因为我将 JWT 令牌存储在仅 HTTP 的 cookie 中。
我正在使用返回正确响应的无服务器函数(直接测试 curl 请求时,甚至在记录 lambda 时):
{
"statusCode":200,
"body":"{\"X-Hasura-User-Id\":\"74d3bfa9-0983-4f09-be02-6a36888b382e\",\"X-Hasura-Role\":\"user\"}"
}
然而,Hasura 钩子似乎没有识别出响应:
{
"type": "webhook-log",
"timestamp": "2020-02-07T10:27:34.844+0000",
"level": "info",
"detail": {
"response": null,
"url": "http://serverless:3000/auth",
"method": "GET",
"http_error": null,
"status_code": 200
}
}
这两行日志在我的日志中是相邻的。我只是对它们进行了一些重新格式化以方便阅读。
我的 lambda 代码如下所示:
export const handler = async (event) => {
const cookies = getCookiesFromHeader(event.headers);
const { access_token: accessToken } = cookies;
let decodedToken = null;
try {
const cert = fs.readFileSync("./src/pem/dev.pem");
decodedToken = jwt.verify(accessToken, cert);
} catch (err) {
console.error(err);
return {
statusCode: 401,
};
}
const hasuraClaims = decodedToken['https://hasura.io/jwt/claims'];
return {
statusCode: 200,
body: JSON.stringify({
"X-Hasura-User-Id": hasuraClaims['x-hasura-user-id'],
"X-Hasura-Role": hasuraClaims['x-hasura-default-role']
})
}
}
知道发生了什么吗?请注意,我正在使用无服务器离线,以防万一。:)