是否可以检查Facebook上是否确认了电子邮件?

时间:2013-01-11 14:48:30

标签: facebook security facebook-graph-api single-sign-on facebook-authentication

更新

这是在2013年12月16日通过https://www.facebook.com/whitehat/report/向Facebook报告的,Facebook于12月17日回应该错误早已被修复

我已经使用我的Facebook帐户(我仍未验证电子邮件地址)对此进行重新测试,并且在使用Grap API Explorer tool时,无法使用图表API获取此帐户的电子邮件地址或使用FQL查询。

结论:您使用图谱API或FQL查询从Facebook获得的电子邮件地址是经过验证的电子邮件。如果某个帐户尚未验证其电子邮件,则无法获得该帐户。

原帖

我正在制作一个使用SSO的网络应用,该用户可以通过Google或Facebook登录。我希望拥有这两种类型帐户的用户在我的系统中显示为同一用户,无论他们使用哪种身份登录。为了达到这个目的,我正在考虑使用电子邮件地址作为标识符来了解我是否应该创建一个新帐户或者用户是否已经存在。

为了不引入任何安全问题,我必须知道电子邮件地址已经过验证,并且实际上属于用户。对于Google,userinfo API可以告诉我电子邮件是否已经过验证,因此这里没有问题。但我在Facebook Graph API中找不到这样的内容。

是否可以知道Facebook上是否确认了电子邮件地址?

我知道有一个verified字段,但只会告知帐户是否经过验证,而不是电子邮件地址。

首先,您似乎只能将图谱API用于已确认电子邮件地址的帐户。如果地址未得到确认,我只是告诉我必须先确认电子邮件地址才能登录任何第三方网站。

然而,对于所有帐户而言,这似乎并非如此。在某些情况下,即使您没有确认的电子邮件地址,也可以访问Facebook的所有部分。例如,当您使用@myopera.com邮件地址注册时。

当您使用@ myopera.com电子邮件地址注册Facebook时,您会收到一条消息,指出您的帐户在提交注册表单后已暂时锁定。要继续,您需要提供您的电话号码以验证您的帐户并“保持Facebook安全且免受垃圾邮件”(对于屏幕截图中的瑞典语,这是在我进入Facebook并将语言更改为英语之前):

Security check during sign up

当您提供电话号码时,您已登录,Facebook不会再唠叨您必须验证您的电子邮件地址。

您唯一可以看到您的电子邮件地址尚未经过验证的地方位于设置页面上:

Facebook settings view with unconfirmed email address

在您验证电子邮件地址之前通常无法访问的移动设置可用,并列出注册时输入的电话号码:

Facebook mobile settings view with unconfirmed email address

除此之外,还可以使用未经证实的电子邮件地址登录第三方网站:

Logging in to graph API explorer with an unconfirmed email address

当我使用此用户连接到图表api时,我可以获得未经确认的电子邮件地址,verified字段按预期返回true,因为我通过添加电话号码verified the account。显然我不相信我从Facebook获得的电子邮件地址真的属于拥有Facebook帐户的用户。

有没有其他方法可以知道电子邮件地址是否经过验证,或者如果我想用它来识别用户,我是否必须自己验证?

3 个答案:

答案 0 :(得分:3)

虽然不是最佳方式,但您可以通过发送搜索并解析结果来尝试解决方法:

http://www.facebook.com/search/results.php?q=<email address here>

除了可搜索之外,您还要受到用户为自己设置的任何特定隐私设置的约束,但不能以其他方式代替......

答案 1 :(得分:0)

我从未使用它,但您可以查看user.email_hashes的FQL查询:http://developers.facebook.com/docs/reference/fql/user

答案 2 :(得分:0)

我一直在寻找有关此问题的Facebook官方声明,最后我发现了这个问题:https://developers.facebook.com/docs/facebook-login/multiple-providers#postfb1,它明确表示开发人员不应依赖已验证电子邮件地址的事实。