根据电子邮件地址将OAuth帐户与现有帐户合并

Tim*_*ell 6 asp.net facebook oauth asp.net-mvc-4

我正在开发一个MVC4/Razor网站,客户要求该网站能够使用Facebook/Google帐户登录.幸运的是,使用Forms身份验证相当简单.

但是,我遇到的问题是:如果提供商返回的用户电子邮件地址与现有用户名相匹配怎么办?

例如,tim@rocketeerconsulting.com以前作为本机帐户存在.无论出于何种原因,用户都想使用Facebook登录.Facebook返回蒂姆@ rocketeerconsulting是用户的电子邮件地址.如果用户尝试使用该信息创建帐户,MVC4将声明该帐户已存在.

有一些问题:

  1. 如果OAuth提供商提供的电子邮件地址与现有帐户匹配,是否允许用户合并帐户?
  2. 这带来了潜在的安全风险.我可以依靠OAuth提供商来确认该地址是否有效?如果没有,恶意用户可以创建Facebook帐户,然后获得对其他用户帐户的访问权限.
  3. 如果有的话,应该如何实施这样的事情呢?

我承认有一个类似的问题在这里,但我的问题具体来说,涉及在MVC4窗体身份验证的情况下.

fcm*_*fcm 1

你是对的:这种方式很容易冒充。
事实上,更糟糕的是,并不是所有的 OAuth 提供商都会向你提供用户电子邮件地址 (LinedId)。
每个 OAuth 提供商都使用电子邮件地址进行初始验证,但是,用户可以拥有多个电子邮件地址,实际上有些提供商鼓励您将它们作为备份。
因此,电子邮件并不是识别用户身份的良好“钥匙”。
您的解决方案可能是拥有一个包含您自己的内部 ID 的表,并将其与 OAuth 提供商唯一的用户标识相关联:有些使用电子邮件地址,其他使用屏幕名称或类似名称。
这将允许用户在您的站点上拥有多个 OAuth 验证器。我通过以下方式实现了这一点:Linkedin、Twitter、Amazon、Google+、Microsoft 和 Facebook。
另外,我们的用户可以使用他们的域帐户登录,但这是另一个故事......