在数据库中存储经过身份验证的Facebook用户

时间:2014-08-02 17:45:57

标签: android database facebook web-services authentication

我试图找到存储在数据库中的正确方法&使用Facebook验证登录我的应用程序的用户:

因此,当用户首次登录应用时,网络服务会看到'此用户不在数据库中并插入其数据。用户第二次登录时,应用程序会联系Web服务并获取有关此用户的一些信息,仅供用户自己使用,例如用于与Web服务通信的api密钥。

但这需要身份验证,因此webservice不会向除用户之外的任何人提供api密钥。在客户端使用Facebook验证客户端很容易,但是网络服务如何知道这种身份验证发生了?我已经在SO上阅读了很多关于此问题的内容,并意识到我应该将(哈希的)OAuth访问令牌存储为用户的密码,然后在登录时将此令牌发送到Web服务,这样就可以了数据库中存储的令牌与收到的令牌之间的匹配,从而验证用户。

但是,令牌过期。因此,当此令牌过期时,用户应使用facebook在客户端重新进行身份验证,并且Web服务应该接收新令牌。此时,web服务将尝试在此新令牌与存储在数据库中的旧令牌之间进行匹配,并且它将失败。因此,web服务应该更新令牌然后对其进行身份验证,但是web服务如何知道此令牌源自应用程序并且是有效的,而不是其他人发送的令牌? Web服务如何知道旧令牌已过期,而不是某人只是试图导致此令牌替换发生(例如,攻击者发送随机密码)。这个令牌替换基本上打破了首先存储令牌的全部要点,因为任何不同的令牌都只会替换旧令牌。

基本上问题是 - 如果现有用户的令牌过期,我怎样才能安全地更新现有用户的令牌?

我为阅读的长篇文章道歉,我已经研究了这个问题2天了,我只是遗漏了一些重要的东西。

1 个答案:

答案 0 :(得分:1)

如果用户已经授权您的申请。 Facebook将返回一个有效的访问令牌,而无需任何面向用户的对话框。但是,如果用户取消了您的应用程序的授权,那么用户需要重新授权您的应用程序才能获得access_token。

你应该阅读这篇文章,希望能帮助你理解: - )

https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/

它适用于PHP,但应该转换为android。

基本上,您只需要使用存储的oauth数据请求新令牌。