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

问题描述

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

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

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

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

我认为的一个解决方案是为组织和角色的每种组合建立一个小组。 即:OrganizationA__ADMINOrganizationB__USER 等 因此,我可以使用 Content 模型上的 group auth 指令来限制对架构的访问:

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

内容将有一个带有值的 group 字段:OrganizationA__ADMIN

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

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

解决方法

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

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

例如

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

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