在移动应用程序中使用Facebook和用户注册登录

时间:2018-01-20 15:44:23

标签: android facebook security facebook-graph-api oauth

我有一个Android应用程序,用户可以通过他们的Facebook帐户使用它。为此,我整合了Facebook登录。但是,我对Facebook的用户注册感到困惑。

当用户登录时,Facebook提供userId,电子邮件和访问令牌。我可以使用它们为我的后端用户创建一个帐户。让我们演示一下这个场景:

用户优先,

    1- User logged-in by Facebook.
    2- The email is checked by server and returns no such user
    3- An account is created by the information from Facebook
    4- The user keeps using the app with this account.

用户又来了,

    1- User logged-in by Facebook.
    2- The email is checked by the server and returns that there exists a user.

就在这里,以下是问题:

1-服务器如何信任来自真正Facebook的请求,以便服务器可以响应应用程序"他可以登录"?当然,我是否应该通过连接到服务器端的Facebook来验证访问令牌?

2-如果没有,如何以非常安全的方式使用Facebook登录注册用户?

类似的问题已经被问到here,但没有答案作为解决方案。

1 个答案:

答案 0 :(得分:5)

我已经研究过并最终决定采用以下步骤:

1 - 该应用程序使用Facebook登录并获取访问令牌,电子邮件,名称和userId。

2 - 该应用程序连接到API(服务器端),发送从Facebook收集的信息

3 - 服务器获取访问令牌并使用以下内容对其进行验证:

https://graph.facebook.com/me?access_token={ACCESS-TOKEN}

返回以下内容:

{"name":"{USER-NAME}","id":"{USER-ID}"}

4 - 服务器会检查两个用户ID是否相同。如果是,则验证令牌是否来自Facebook,并且该信息可用于登录/注册。

5 - 服务器检查系统中是否存在电子邮件/用户ID(fb id)。如果没有,则创建用户(触发注册过程)。如果是,则将login设置为success,服务器返回刚生成的access-token和refresh-token的用户信息。

6 - 其他操作都是通过oAuth方式使用这些访问和刷新令牌而不再连接Facebook来执行的。

每次打开应用程序时,AccessToken.getCurrentAccessToken()都会从Facebook获取访问令牌。如果为null,则用户将看到登录屏幕。如果不是,则将应用上述步骤。

好问题和答案相关本主题:

REST API for website which uses Facebook for authentication

Architecture Design - REST API to support Facebook Login done by Mobile app

关于Facebook本身已有的用户,合并操作和数据结构建议:

Essential Guides of Facebook

Using Facebook Login with Existing Login Systems