AWS AppSync授权

时间:2018-01-24 22:13:39

标签: amazon-web-services lambda graphql graphql-subscriptions aws-appsync

我打算使用AWS Appsync在lambda函数中迁移graphQL端点,该函数由POST网关通过POST网关触发。我正在研究AppSync主要是因为订阅,我无法使用Lambda函数创建。

我的身份验证机制基于Auth0,使用无密码,我的授权机制基于DynamoDB中几个表的数据,并且嵌入在graphQL解析器中,如Facebook和Apollo所推荐。

更重要的是,它基于请求的每个部分,包括检查调用查询/变异的权限,之后,查询中包含的不同实体,因为正在触发相应的解析器。

据我所知,这远远不能在AWS AppSync中实现,因为它强制使用Cognito。也许某种自定义授权器,如API网关可以完成工作,但它仍然不确定,因为它需要在graphQL请求解析期间执行多次(请记住,除了初始操作检查之外,每个嵌套对象一个)。

也许我可以使用通知制作有关订阅的解决方法并刷新查询,但我也必须对此进行调查。

其他人也有这个问题吗?你打算如何计划或解决它?

非常感谢任何帮助

卡洛斯

1 个答案:

答案 0 :(得分:7)

此时,AppSync使用您查询的资源中的元数据支持AuthZ检查,或者您可以传递数据并在解析程序中进行检查。例如,您可以在DynamoDB表上存储授权元数据并检查它然后返回数据,但是您无法检查单独的数据源。但是,由于AppSync仍然不是GA,将来会有更多的auth方法开放。

同时有一些选择:

  • 使用Lambda作为解析器,在读取/写入DynamoDB之前进行AuthZ检查

  • 将您的Auth0身份与AWS IAM联合,并在解析器中使用这些凭据作为检查。 AppSync支持这些凭据。

  • 检查您为AuthZ检查通过的解析器中的JWT声明。您可以使用Velocity语言中的$context.identity.claims.attrib�进行此操作。

随着服务的发展,请在接下来的几个月内继续查看AppSync文档页面以获取更多选项。

编辑现在,AppSync授权方案和用例的文档中有一个指南:https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html

编辑#2 有一篇新的博客文章,其中包含针对高级授权方案使用解析器的多个数据源:https://hackernoon.com/graphql-authorization-with-multiple-data-sources-using-aws-appsync-dfae2e350bf2