我可以使用 aws amplify 和 @auth 装饰器将 GraphQL 突变设为私有吗?这被认为是一种安全的方法吗?

Posted

技术标签:

【中文标题】我可以使用 aws amplify 和 @auth 装饰器将 GraphQL 突变设为私有吗?这被认为是一种安全的方法吗?【英文标题】:Can I make GraphQL mutations private by using aws amplify and @auth decorator? Is that considered as a secured approach? 【发布时间】:2021-05-23 23:14:31 【问题描述】:

我正在使用 React 和 AWS 构建邮局应用程序。我目前正在构建我的 GraphQL API,我知道我可以在我的 graphQL 方案中使用 @auth 装饰器,这允许我阻止某些用户根据他们的身份验证状态和组读取属性。

我想知道是否可以将这些 @auth 规则添加到突变中?我的目的是防止不在 Admin 或 Worker 组中的用户访问我的 API 突变以删除包。如果不可能,使特定突变只能由特定组访问的最佳方法是什么(这些组存储在 AWS Coginto 用户投票中)?

【问题讨论】:

【参考方案1】:

确实,您可以使用@auth 指令将给定@model 的突变访问限制为一组已知的组。例如,要仅允许管理员和员工访问给定模型的删除操作,您可以尝试以下操作:

type Package
  @model
  @auth(
    rules: [
       allow: groups, groups: ["Admin", "Workers"], operations: [delete] 
    ]
  ) 
  id: ID!

此处,调用 API 时,对于未注册 admin 或employee 组的任何用户,操作将失败。查看Static Group Authorization 和Dynamic Group Authorization 上的文档了解更多信息。

【讨论】:

以上是关于我可以使用 aws amplify 和 @auth 装饰器将 GraphQL 突变设为私有吗?这被认为是一种安全的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

Auth.signIn() 使用设备 - AWS Amplify 与 React-Native

模拟适用于 Android 的 AWS Amplify Auth API

aws-amplify auth currentSession 不返回当前用户

AWS amplify add auth:如何在执行 amplify cli 后添加重定向登录 URI

AWS Amplify AppSync GraphQL @Auth 指令:如何禁止为公共用户列出元素

使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?