我有一个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 回答
我已经研究过,最后决定采用以下步骤:
1- 该应用程序使用Facebook登录并获取访问令牌,电子邮件,名称和userId .
2- 应用程序连接到API(服务器端),发送从Facebook收集的信息
3- 服务器获取访问令牌并使用以下内容对其进行验证:
它返回以下内容:
4- 服务器检查两个用户ID是否相同 . 如果是,则验证令牌是否来自Facebook,并且该信息可用于登录/注册 .
5- 服务器检查系统中是否存在电子邮件/用户ID(fb id) . 如果没有,则创建用户(触发注册过程) . 如果是,则将login设置为success,服务器返回刚生成的access-token和refresh-token的用户信息 .
6- 其他操作都是通过以oAuth方式使用这些访问和刷新令牌而不再连接Facebook来执行的 .
每次打开应用程序时,
AccessToken.getCurrentAccessToken()
都会从Facebook获取访问令牌 . 如果为null,则用户将看到登录屏幕 . 如果不是,则将应用上述步骤 .Good Questions and Answers Related This Topic:
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