【问题标题】:graphql schema stitching with auth使用身份验证的 graphql 模式拼接
【发布时间】:2018-11-08 13:07:10
【问题描述】:

我的想法是使用 graphql 和无服务器创建一个微服务方法。

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

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

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

我在 apigateway 中添加了一个自定义授权程序,它从客户端解析 JWT 令牌并将其发送到带有 userId 的 graphql 上下文

但现在我想为我的解析器添加授权。

对此最好的方法是什么?

我希望它尽可能模块化,最好的(我认为)是在 apigatway 服务中添加授权,以便我的其他服务保持清洁。但我不知道怎么做?

有什么想法吗?

【问题讨论】:

    标签: graphql apollo serverless serverless-architecture graphql-tools


    【解决方案1】:

    您可能想从 AWS 中查看 AppSync。它会为你处理很多这样的事情;授权者,查询 DyanmoDB 等。

    我使用 Apollo GraphQL 构建了 Lambda API,并通过 API Gateway 公开了它们。然后我使用 Apollo 的模式拼接将它们连接在一起。这里有一个非常重要的警告:slooow。 API 网关已经存在速度损失,虽然这是可以接受的,但想象一下在向用户返回响应之前跳过多个网关。您可以缓存模式,这会有所帮助。当然,您的容忍度取决于您的应用程序和用户体验。也许这很好 - 只有您(或您的用户)可以回答这个问题。

    除此之外,我处理身份验证的方式是接受授权标头并手动进行检查。我没有使用 API Gateway 中的任何自定义授权方。我没有为此使用 Cognito,所以它与另一个服务通信。这一切都发生在解析器之前。您为什么要在解析器中进行授权?只有一些你想保护吗?访问控制?

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

    GraphQL 对所有内容都有一个 POST 端点。因此,这无助于为每个资源配置 API Gateway 身份验证。这意味着您现在已经超越了 API 网关,并且无论如何都可以调用您的 Lambda。您没有阻止调用,因此您现在正在被计费并运行代码。

    因此,您不妨编写自定义逻辑来进行身份验证。如果您使用的是 Cognito,那么有一个 SDK 可以帮助您。或者看看 AppSync。

    【讨论】:

      猜你喜欢
      • 2022-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2020-09-07
      • 2019-06-28
      • 2018-03-17
      • 2020-06-06
      • 1970-01-01
      相关资源
      最近更新 更多