我打算使用AWS Appsync在lambda函数中迁移graphQL端点,该函数由POST网关通过POST网关触发。我正在研究AppSync主要是因为订阅,我无法使用Lambda函数创建。
我的身份验证机制基于Auth0,使用无密码,我的授权机制基于DynamoDB中几个表的数据,并且嵌入在graphQL解析器中,如Facebook和Apollo所推荐。
更重要的是,它基于请求的每个部分,包括检查调用查询/变异的权限,之后,查询中包含的不同实体,因为正在触发相应的解析器。
据我所知,这远远不能在AWS AppSync中实现,因为它强制使用Cognito。也许某种自定义授权器,如API网关可以完成工作,但它仍然不确定,因为它需要在graphQL请求解析期间执行多次(请记住,除了初始操作检查之外,每个嵌套对象一个)。
也许我可以使用通知制作有关订阅的解决方法并刷新查询,但我也必须对此进行调查。
其他人也有这个问题吗?你打算如何计划或解决它?
非常感谢任何帮助
卡洛斯
答案 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