AWS Cognito& Lambda:将联合身份添加到用户池

时间:2018-03-14 15:28:29

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

我知道我的问题类似于this one,但我觉得问题不是很好,所以我会按照我的方式问。

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

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

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

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

以上所有工作都很好。

但是,我在User Pool v Identity Pool中遇到的问题是,可能有两个具有相同电子邮件地址的独立身份 - 一个在Identity Pool中,另一个在User Pool中。

如何合并这些用户? 一个是UserPool,一个是自定义标识池中的开发者身份。

1 个答案:

答案 0 :(得分:3)

当使用具有联合身份的Cognito身份池和Cognito用户池时,无法将用户池中的用户与用户池中的用户合并,正如您所意识到的那样。这是一个很大的挫败感,但2017年末,亚马逊增加了将联盟直接挂钩到Cognito用户池的功能:

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

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

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

使用这种方法,根据您的使用情况,可能根本不需要Cognito Identity Pool。