首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AWS Lambda的Hasura身份验证挂钩上的空响应

使用AWS Lambda的Hasura身份验证挂钩上的空响应
EN

Stack Overflow用户
提问于 2020-02-07 18:47:43
回答 1查看 115关注 0票数 0

我在使用Lambda配置Hasura auth钩子时遇到了一些问题。出于安全原因,我需要这样一个函数,因为我将JWT令牌存储在一个仅限HTTP的cookie中。

我使用了一个无服务器函数,它可以返回正确的响应(无论是在直接测试curl请求时,还是在记录lambda时):

代码语言:javascript
运行
复制
{
    "statusCode":200,
    "body":"{\"X-Hasura-User-Id\":\"74d3bfa9-0983-4f09-be02-6a36888b382e\",\"X-Hasura-Role\":\"user\"}"
}

然而,Hasura hook似乎没有识别出响应:

代码语言:javascript
运行
复制
{
    "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代码看起来像这样:

代码语言:javascript
运行
复制
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']
        })
    }
}

知道是怎么回事吗?请注意,我正在脱机使用无服务器,以防。:)

EN

回答 1

Stack Overflow用户

发布于 2020-02-07 20:38:57

在AWS Lambda中,规范要求响应体被串行化,实际的响应将是一个解析的JSON对象,这是Hasura将从auth webhook接收的。

当您使用serverless-offline时,响应主体将以字符串的形式返回(因为使用了JSON.stringify ),而不会被解析。一个简单的卷曲就能给你带来不同的效果。

上面的代码将在Lambda上工作,但不能在使用无服务器-离线的本地开发上工作。您将不得不使用event对象来查看isOffline是否为真,并直接返回JSON,如果不是,则返回经过字符串注册的版本。

示例代码:

代码语言:javascript
运行
复制
if(event.isOffline) {
 // make it work with serverless-offline
 return { "x-hasura-role": "user" ....};
} else {
 // make it work with lambda
 return { statusCode: 200, body: JSON.stringify({"x-hasura-role": "user"}) };
}

无服务器-离线存储库中的Official example以及错误处理。

相关问题:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60111908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档