用auth进行graphql模式拼接

用auth进行graphql模式拼接,graphql,apollo,serverless,serverless-architecture,graphql-tools,Graphql,Apollo,Serverless,Serverless Architecture,Graphql Tools,我的想法是用graphql和serverless创建一个微服务方法 我正在考虑为dynamodb中的每个表创建一个服务,然后创建一个apigateway服务,并在apigateway服务中使用graphql工具将模式缝合在一起 这项工作相当不错,我很满意 但现在我想向graphql查询和变体添加授权 我在apigateway中添加了一个自定义autherizer,它解析来自客户机的JWT令牌,并使用userId将其发送到graphql上下文 但是现在我想向我的解析器添加授权 最好的方法是什么 我

我的想法是用graphql和serverless创建一个微服务方法

我正在考虑为dynamodb中的每个表创建一个服务,然后创建一个apigateway服务,并在apigateway服务中使用graphql工具将模式缝合在一起

这项工作相当不错,我很满意

但现在我想向graphql查询和变体添加授权

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

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

最好的方法是什么

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


有什么想法吗

您可能需要从AWS查看AppSync。它会为你处理很多事情;授权人、查询DyanmoDB等

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

撇开这一点不谈,我处理auth的方法是接受授权头并手动进行检查。我没有使用API网关的任何自定义授权程序。我没有为此使用Cognito,所以它与另一个服务进行了对话。这一切都发生在解析器之前。为什么要在解析器中进行授权?你只想保护一些吗?访问控制

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

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

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