创建AWS Cognito联合身份时如何检查电子邮件地址是否与Facebook返回的电子邮件相匹配

问题描述

我正在使用AWS Cognito联合身份在Web应用程序中启用与Facebook和Google的社交登录。 (我不使用用户池,仅使用身份池。)

此联合身份用于调用AWS Lambda函数,该函数在我们的后端数据库中创建用户个人资料,我们后端中的用户个人资料架构将为每个用户存储Cognito身份ID和电子邮件地址从调用Facebook或Google的登录API返回。

但是我如何在AWS Lambda函数中验证电子邮件地址(作为Lambda函数的参数提供)与Facebook返回的电子邮件相同,以及客户端用来登录Cognito身份的电子邮件?>

如果这是Google登录名,那么有一个显而易见的解决方案:使用https://developers.google.com/identity/sign-in/web/backend-auth中概述的步骤对Lambda函数中的JWT进行解码和验证。

但是AFAIK Facebook登录未使用JWT,因此我不确定如何进行等效的服务器端验证,以确保客户端传递的电子邮件与Facebook登录API返回的内容相匹配。

我想阻止的攻击是这种攻击:

  1. 攻击者使用他们自己的Facebook帐户登录我们的应用
  2. 生成新的Cognito身份
  3. 客户端构建一个有效载荷以发送到Lambda函数,其中包括从Facebook返回的电子邮件地址。
  4. 调用Lambda之前,攻击者(例如,使用Chrome开发工具)会修改(3)内置的有效负载中的电子邮件地址
  5. 客户端使用包含伪造电子邮件地址的有效负载调用Lambda函数
  6. 使用攻击者的伪造电子邮件地址创建新的用户个人资料
  7. 现在,如果另一个真实用户尝试使用相同的电子邮件地址登录,由于“此电子邮件已附加到另一个帐户”,因此将阻止他们登录

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)