使用Facebook登录并在移动应用中注册用户

ftb*_*ftb 4 security android facebook oauth facebook-graph-api

我有一个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.
Run Code Online (Sandbox Code Playgroud)

用户再次来

    1- User logged-in by Facebook.
    2- The email is checked by the server and returns that there exists a user.
Run Code Online (Sandbox Code Playgroud)

在这里,这里是问题:

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

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

这里已经提出类似的问题,但是没有答案作为解决方案。

ftb*_*ftb 9

经过研究,最终决定采用以下步骤:

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

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

3-服务器获取访问令牌并使用以下方法进行验证:

https://graph.facebook.com/me?access_token={ACCESS-TOKEN}
Run Code Online (Sandbox Code Playgroud)

它返回以下内容:

{"name":"{USER-NAME}","id":"{USER-ID}"}
Run Code Online (Sandbox Code Playgroud)

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

5-服务器检查系统上是否存在电子邮件/用户ID(fb ID)。如果不是,则会创建一个用户(触发注册过程)。如果是,则将登录设置为成功,服务器将返回带有刚刚生成的访问令牌和刷新令牌的用户信息。

6-其他操作全部通过使用oAuth方法的访问和刷新令牌来执行,而无需再次连接Facebook。

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

与本主题相关的良好问答:

使用Facebook进行身份验证的网站的REST API

架构设计-REST API支持通过移动应用完成的Facebook登录

关于已经存在的用户,合并操作以及Facebook本身的数据结构建议:

Facebook的基本指南

在现有登录系统上使用Facebook登录