问题描述
我正在使用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返回的内容相匹配。
我想阻止的攻击是这种攻击:
- 攻击者使用他们自己的Facebook帐户登录我们的应用
- 生成新的Cognito身份
- 客户端构建一个有效载荷以发送到Lambda函数,其中包括从Facebook返回的电子邮件地址。
- 在调用Lambda之前,攻击者(例如,使用Chrome开发工具)会修改(3)内置的有效负载中的电子邮件地址
- 客户端使用包含伪造电子邮件地址的有效负载调用Lambda函数
- 使用攻击者的伪造电子邮件地址创建新的用户个人资料
- 现在,如果另一个真实用户尝试使用相同的电子邮件地址登录,由于“此电子邮件已附加到另一个帐户”,因此将阻止他们登录。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)