AWS Amplify (AppSync + Cognito) 使用每个组织/租户的动态组进行授权

Posted

技术标签:

【中文标题】AWS Amplify (AppSync + Cognito) 使用每个组织/租户的动态组进行授权【英文标题】:AWS Amplify (AppSync + Cognito) Authorization using dynamic groups per organitzation/tenant 【发布时间】:2021-07-20 20:58:30 【问题描述】:

我有一个具有多组织结构的 AWS Amplify 应用程序:

组织 A -> 组织 A 的内容 组织 B -> 组织 B 的内容

假设我们有用户 Alice,Alice 属于两个组织,但是,她在每个组织中都有不同的角色,在组织 A 上,Alice 是管理员并且拥有更多权限(即:可以删除内容或修改他人的内容),在组织 B 中,她是普通用户。

因此,我不能简单地在 Amplify (Cognito) 上设置常规组,因为某些用户,例如 Alice,可以属于不同组织的不同组。

我认为的一个解决方案是为每个组织和角色组合设置一个组。 即:OrganizationA__ADMINOrganizationB__USER 等 所以我可以使用Content 模型上的组身份验证指令来限制对架构的访问:

allow: group, groupsField: "group", operations: [update],

内容将有一个 group 字段,其值为:OrganizationA__ADMIN

然后我可以使用Admin Queries API 将用户添加到组中 但是,似乎不可能动态地将用户添加到组中,每次创建新组织时我都必须手动创建每个组,这几乎扼杀了我的想法。

关于如何实现目标结果的任何其他想法? 我知道我可以在代码上添加限制,但这不太安全,我宁愿在数据库层有这个限制。

【问题讨论】:

【参考方案1】:

考虑在你身上产生额外的声明pre-token-generation handler

基本上你可以创建一个包含组织角色映射的属性

例如


// ...
  "custom:orgmapping": "OrgA:User,OrgB:Admin"

然后在您的预令牌生成处理程序中将它们转换为实际不存在于池中的“伪”组。

【讨论】:

谢谢!我会试试这个,我会在这里更新它

以上是关于AWS Amplify (AppSync + Cognito) 使用每个组织/租户的动态组进行授权的主要内容,如果未能解决你的问题,请参考以下文章

AWS Amplify AppSync 订阅无法正常工作

在 React 中使用 AWS Amplify Appsync 上传图像

AWS Amplify AppSync 订阅:数据返回 null

aws amplify appsync 中的 Graphql 突变错误

如何使用 Amplify 为 GraphQL API (AWS AppSync) 生成类

AWS Amplify (AppSync + Cognito) 使用每个组织/租户的动态组进行授权