我正在开发一个MVC4 / Razor网站,客户要求该网站能够使用Facebook / Google帐户登录。幸运的是,使用Forms身份验证非常简单。
但是,我遇到的问题是:如果提供商返回的用户电子邮件地址与现有用户名相匹配怎么办?
例如,tim@rocketeerconsulting.com以前作为本机帐户存在。无论出于何种原因,用户都想使用Facebook登录。 Facebook返回蒂姆@ rocketeerconsulting是用户的电子邮件地址。如果用户尝试使用该信息创建帐户,MVC4将声明该帐户已存在。
有一些顾虑:
我认识到存在类似的问题here,但我的问题专门针对MVC4中的Forms auth的上下文。
答案 0 :(得分:1)
你是对的:这种方式很容易冒充
实际上,要为问题添加更多内容,并非所有OAuth提供商都会为您提供用户电子邮件地址(LinedId)。
每个OAuth提供商都使用电子邮件地址进行初始验证,但是,用户可以使用多个电子邮件地址进行初步验证,实际上还有一些措施可以让您将其作为备份。
因此,电子邮件不是一个好的关键'识别用户。
您的解决方案可能是拥有一个包含您自己的内部ID的表格,并将其与OAuth提供商唯一的用户标识相关联:一些使用电子邮件地址,其他人使用屏幕名称或类似名称。
这将允许用户在您的网站上拥有多个OAuth验证程序。
我实现了这个:Linkedin,Twitter,亚马逊,Google +,微软和Facebook。另外,我们的用户可以使用他们的域帐户登录,但这是另一个故事......