AWS AppSync 授权

AWS AppSync Authorization

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

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

更重要的是,它基于请求的每个部分,其中包括检查调用 query/mutation 的权限,之后,查询中包含的不同实体,作为适当的解析器正在被解雇了。

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

也许我可以使用通知来解决订阅问题并刷新查询,但我也必须调查一下。

还有其他人遇到这个问题吗?你打算怎么解决,或者已经解决了?

任何帮助将不胜感激

卡洛斯

此时 AppSync 支持使用您正在查询的资源中的元数据进行 AuthZ 检查,或者您可以传递数据并在解析器中进行检查。例如,您可以将授权元数据存储在 DynamoDB table 上并检查它,然后检查 return 数据,但您不能检查单独的数据源。不过AppSync还没有正式发布,以后会开放更多的授权方式。

同时一些选项:

  • 使用 Lambda 作为您的解析器并在 reading/writing 到 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 有一个新博客 post 用于将多个数据源与您的解析器一起用于高级授权方案:https://hackernoon.com/graphql-authorization-with-multiple-data-sources-using-aws-appsync-dfae2e350bf2