2011-01-27 85 views
7

我开发了一个简单的API来允许我的Android/iPhone应用程序和我的服务器之间进行通信。在我的应用程序,用户需要验证自己和他们使用的登录/密码凭证与以下API调用做到这一点:Facebook连接以在个人API上进行身份验证

http://api.myapp.com/login?user=xxx&pass=pass 

应用程序收到回报:

{ "api_token": "xxxx-xxxx-xxxx-xxxx" } 

所以基本上我对交换我的凭据api_token

我想添加Facebook连接支持。我已成功使用Facebook SDK并收到正确的access_token

不过,我需要实现一种机制与api_token

假设用户已经连接与Facebook(他的网站用户面板上)他的帐户交换access_token,这将是进入到交流的最佳实施?

回答

5

这是我最终做到的。它工作一年以上,没有任何问题。我们的想法是使用下面的API调用来交换令牌:

http://api.myapp.com/login/facebook?access_token=<facebook_access_token> 

服务器端,验证access_token的有效性用一个简单的

wget -qO- https://graph.facebook.com/me?access_token=<facebook_access_token> 

哪个送你回一个JSON的所有用户信息,包括用户的Facebook ID。假设用户已将其帐户连接到Facebook,则可以查找user_id并发回api_token

+0

以下是我关心的场景: 应用程序A为X用户获取fb访问令牌。 应用程序A在http://api.myapp.com/login/facebook访问您的登录网址?access_token = ...' 由于您现在拥有应用程序A已获取的访问令牌,因此您现在拥有与用户相同的所有访问权限,而用户没有授予您许可权限(他们“我只授予应用程序A的许可)。虽然我可以通过多种方式将其视为辩护,但它似乎仍然有些不妥,并且可能违反了用户的信任。 你觉得呢? – 2012-09-26 06:45:46