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登录名来注册用户?
经过研究,最终决定采用以下步骤:
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带来访问令牌。如果为空,则用户将看到登录屏幕。如果不是,将采用上述步骤。
与本主题相关的良好问答:
架构设计-REST API支持通过移动应用完成的Facebook登录
关于已经存在的用户,合并操作以及Facebook本身的数据结构建议:
| 归档时间: |
|
| 查看次数: |
1662 次 |
| 最近记录: |