使用 AWS Amplify 和 AWS Cognito 进行数据特定授权
Posted
技术标签:
【中文标题】使用 AWS Amplify 和 AWS Cognito 进行数据特定授权【英文标题】:Data-specific Authorization with AWS Amplify & AWS Cognito 【发布时间】:2021-10-01 20:12:32 【问题描述】:背景
大家好。首先,我正在学习 AWS Amplify / GraphQL,所以我不确定这是否是 GraphQL 特定的问题,或者它是否与 AWS Cognito 相关。也就是说,如果这个问题被认为是题外话,请引导我到更合适的地方问这个问题。
问题
使用 AWS Amplify 和 AWS Cognito,我希望 GraphQL 层仅响应特定于该实体的数据。举个例子:
给定一个组织和用户数据库结构,其中许多用户属于一个组织,我如何确保用户只能与特定于其所属组织的数据进行交互?
更详细的例子
鉴于下图,我如何确保user #2
在查询 AWS Amplify GraphQL 层时,他们永远无法与organization #1
的数据进行交互?
我试过的
目前,在 GraphQL 层中,我为每个查询手动添加了 WHERE
子句,这样客户端就无法查看跨组织数据。但是,这不会阻止任何用户创建自己的查询来查看跨组织数据。我目前正在考虑建立一个custom authorization resolver,但它似乎还不符合我的具体需求。
非常感谢任何帮助。
【问题讨论】:
看起来@derrops 有一个很好的答案。您是否绑定到任何特定的身份验证流程?隐式资助? /身份验证代码/客户端凭据? 在我看来这是一个认知问题,需要在您的一个用户池中设置多个组。?那个声音对吗?您是否查看过docs.aws.amazon.com/cognito/latest/developerguide/…,然后您可以对用户进行自省,并且应该(我认为)应该允许组 admin 与组 guest 中的用户查看相同查询的差异 graphql 模式/类型(甚至隐藏在 gql 中)游乐场可用查询/变异取决于角色) 然后像aws.amazon.com/blogs/mobile/graphql-security-appsync-amplify那样将上述组混合到你的gql类型中 【参考方案1】:如果你想保持Amplify
的做事方式,你可以使用Authorization Rules。
组
如果组织中的用户在同一个Cognito
组中,那么您可以使用Dynamic group authorization
。例如:
type Sale @model @auth(rules: [ allow: groups, groupsField: "org" ])
id: ID!
org: [String]
这样,只有销售人员才能访问具有与其自己匹配的组/组织的销售。
属性
或者,您也可以使用用户的属性,以及 ownerField
指令。
【讨论】:
以上是关于使用 AWS Amplify 和 AWS Cognito 进行数据特定授权的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS Amplify 和 AWS Cognito 进行数据特定授权
AWS Amplify and React - 找不到模块:无法解析“@aws-amplify/analytics”
Flutter 与 AWS 的集成(有和没有 Amplify)
使用 Amplify 集成构建 AWS Amplify React 应用程序时总是缺少 aws-exports.js