首页 文章

使用auth进行graphql架构拼接

提问于
浏览
0

我的想法是用graphql和无服务器创建一个微服务approch .

我正在考虑为dynamodb中的每个表创建一个服务,然后创建一个apigateway服务,并在apigateway服务中使用graphql-tool将模式拼接在一起 .

这项工作非常好,我很满意 .

但现在我想为我的graphql查询和突变添加授权 .

我在apigateway中添加了一个自定义autherizer,它从客户端解析JWT令牌并使用userId将其发送到graphql上下文

但现在我想向我的解析器添加授权 .

对此最好的方法是什么?

我希望它尽可能地模块化,并且最好(我认为)是在apigatway服务中添加授权,以便我的其他服务保持干净 . 但我不知道怎么办?

有任何想法吗?

1 回答

  • 0

    您可能希望从AWS查看AppSync . 它会为你处理很多这个;授权者,查询DyanmoDB等

    我've built Lambda APIs using Apollo GraphQL and exposed them through API Gateway. I then used Apollo'的模式拼接将它们连接在一起 . 那里有一个懒散的 . 可以接受's already a speed penalty with API Gateway and while it',想象在向用户返回响应之前跳过多个网关 . 您可以缓存架构,这有点帮助 . 您的容忍度当然取决于您的应用和用户体验 . 也许它很好 - 只有你(或你的用户)可以回答这个问题 .

    除此之外,我处理auth的方式是接受Authorization标头并手动进行检查 . 我没有使用API Gateway的任何自定义授权器 . 我没有使用Cognito,因此它与其他服务进行了交谈 . 这一切都发生在解析器之前 . 你为什么要在解析器中进行授权?是否只有一些你想保护?访问控制?

    在这种情况下,将自定义授权程序添加到API网关可能不是最佳...因为您正在谈论在代码中的解析程序级别执行此操作 .

    GraphQL为所有内容都有一个POST endpoints . 因此,这不会有助于为每个资源配置API网关身份验证 . 这意味着你现在已经超越了API网关,无论如何都要调用你的Lambda . 您没有阻止调用,因此您现在需要付费并运行代码 .

    因此,您可以编写自定义逻辑进行身份验证 . 如果你正在使用Cognito,那么有一个SDK可以帮助你 . 或者看看AppSync .

相关问题