AWS Cognito - 使用 API 创建具有外部身份的用户

问题描述

背景:我有一个使用 Cognito 保护的 API 的网页(内部工具)。当前在 Pool 中创建用户的方式如下所示:

  1. 用户进入网页
  2. 使用 Google 登录
  3. Cognito 使用外部提供商 - Google 在池中创建用户
  4. IT 将用户分配到适当的组 = 用户可以使用网页,具体取决于他分配到的组。

现在,问题是前两个步骤。为了让用户出现在池中,他必须先进入网页(在此用户自动踢出后,因为他没有被分配到任何组)&需要等待有人将他分配到一个组。我想自动执行这些步骤,以便用户可以输入该工具并立即使用它。

有没有办法在池中创建(使用 API)用户(使用外部身份提供者),以便我可以在 Cognito 中自动创建条目并将他分配给组?

由于公司拥有 GSuite,我有可能从 cognito 和 google 中检索所有必要的数据来创建它。有人知道该怎么做吗?我想我通读了 boto3 文档和 cognito 文档,但找不到任何答案。

解决方法

我正在尝试解决同样的问题。用户是通过 Cognito 外部提供程序创建的,但在有人手动将此生成的用户添加到分配了必要角色的用户组之前,用户将无权访问。

我正在考虑的一个潜在选项是将用户组一起消除。在 Cognito 身份池中,有一个选项可以根据 Cognito 令牌中包含的声明来分配角色。因此,您可以在用户首次登录之前以编程方式更新身份池上的规则,而不是 IT 将用户映射到具有所需角色的组。向身份池添加规则以检查 userId 声明并映射适当的角色可以解决用例。见 (https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html#using-rules-to-assign-roles-to-users)。 编辑:我意识到这行不通,因为身份池有 25 条规则的限制,因此为每个用户添加规则是不可行的。

另一种选择可能是在 Cognito 用户池上使用 lambda 触发器,因为这允许更多自定义逻辑。 lambda 可以在登录时检查具有预定映射的数据库,并以编程方式将用户分配到用户组。对于我认为是一个非常常见的用例,感觉这将是相当多的工作/组件。希望还有另一种我不知道的方法。

这两个选项似乎都没有我期望的那么干净/简单,所以我很好奇您是否找到了更好的解决方案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...