python - AWS Cognito 和 Lambda : add federated identity to user pool

标签 python python-3.x amazon-web-services aws-lambda boto3

我知道我的问题类似于 this one ,但我觉得问得不太好,所以我就按我的方式问一下。

我有一个适用于 Web 应用程序的正常运行的 AWS Cognito 用户池。我还有一个适用于同一应用程序的功能齐全的身份池。身份池用于对通过 LinkedIn 进行身份验证的用户进行授权。我创建了一个 LinkedIn 应用程序,一切都很好。

现在,我知道 AWS Cognito 不支持 LinkedIn,但我通过为身份池创建自定义身份验证提供程序找到了解决该问题的方法。

因此,当 LinkledIn 用户使用 LinkedIn 登录时,我的应用程序会获取用户 linkedIn ID、电子邮件地址、姓名和位置。 ID 和电子邮件地址通过 AWS API Gateway 发布到我的 Lambda 函数。

使用Boto3函数get_open_id_token_for_developer_identity()然后,Lambda 函数将 LinkedIn 电子邮件传递给 Cognito 身份池,然后返回一个包含 IdentityID 和 Token 的对象。

以上所有工作正常。

但是,我在使用用户池 v 身份池时遇到的问题是,可能有两个具有相同电子邮件地址的独立身份 - 一个在身份池中,一个在用户池中。

如何合并这些用户? 一种是在 UserPool 中,另一种是自定义身份池中的开发人员身份。

最佳答案

正如您所意识到的,当使用具有联合身份的 Cognito 身份池和 Cognito 用户池时,无法将外部服务中的用户与用户池中的用户合并。这是一个重大挫折,但在 2017 年末,亚马逊添加了将联合直接 Hook 到 Cognito 用户池的功能:

https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html

本质上,您可以在 AWS Web 控制台中查看用户池时,通过在“联合 > 身份提供商”部分中进行配置,将外部社交服务与您的 Cognito 用户池连接起来。您授权所需的范围并将它们链接到用户池属性。然后,当有人使用联合身份(例如,从 Facebook)登录时,系统会在您的用户池中创建一个 Cognito 用户,并具有相应的值和一个指示其是联合用户的标记。 (顺便说一句:当使用 Cognito 用户池作为 API 网关端点的安全性时,这些值可以在授权者声明中方便地传递,以便在 Lambda 处理程序中轻松访问。)

正如您可能猜到的那样,LinkedIn 并不是开箱即用支持的社交网络之一。从文档来看,您似乎可以将 LinkedIn 集成实现为 SAML 2.0 身份提供商,以将其与 Cognito 用户池连接以实现此功能。

通过这种方法,根据您的用例,可能根本不需要 Cognito 身份池。

关于python - AWS Cognito 和 Lambda : add federated identity to user pool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49281715/

相关文章:

python - 从 List 生成相邻元素

python-3.x - 如何创建一个具有三重循环的处理栏?

amazon-web-services - 同一应用程序下具有多个环境的 Terraform 和 Elastic Beanstalk

r - CloudFormation 模板无法安装 R 相关包

python - Python Lambda打包和部署Bash

php - 在Python中使用二元运算符...翻译 if (c1 >= "\xc0"& c1 <= "\xdf")

python - python 2.7 Tkinter tcl错误

python - Robot Framework - 将列表变量作为关键字参数传递

python - 带洞的最长等差数列

python - 如何在python中粘贴从键盘复制的文本