授权facebook将用户与其他第三方联系起来

时间:2010-05-18 18:23:27

标签: api authentication facebook

我正在开发一个网站,其中有很大一部分用户通过Facebook Connect登录,因此他们没有我们网站的用户名和密码。我们使用基本身份验证提供我们自己的用户身份验证API,但这不允许Facebook连接用户使用我们的API对客户端进行身份验证。

有没有办法不破坏Facebook的TOS授权使用Facebook身份验证凭据的其他第三方?例如,如果其他站点实现了facebook连接并将会话数据传回给我们?除了使用oAuth作为解决方案的Foursquare等网站之外的API提供商成功使用facebook连接时,是否有任何例子?

1 个答案:

答案 0 :(得分:4)

我为我的应用程序开发了这样一个功能。用户可以在我们的网络前面使用Facebook或Twitter登录,他们也可以通过iPhone / Android应用程序在我们的API上以相同的方式进行身份验证。

我不确定我的方法是最好的,这就是为什么我asked the question关于什么是最好的方法。不过,我将解释我正在做的事情,到目前为止,这项工作非常顺利。

首先,您需要在API中实现login方法。此方法会根据API令牌交换您的凭据,然后将其用于所有将来的呼叫。

以下是login API调用以及您的基本身份验证参数:

http://login:password@api.myapp.com/login

(这只是一个表示你要发送凭据的表示,而不是实际的方式)

作为回报,此API调用会向您发送api_token

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

服务器端,您有一个关联api_tokenuser_id的表格(如果需要还有截止日期等)

每次需要进行身份验证时,您都会使用api_token

http://api.myapp.com/request?api_token=xxxx-xxxx-xxxx-xxxx

现在您已经修改了身份验证实现,您将对Facebook Connect SDK发回的Facebook access_token执行完全相同的操作。您使用以下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

问题是如果用户拒绝来自Facebook的应用程序,这对api_token没有任何影响,用户仍然可以访问API。可能还存在一些安全问题(https肯定会更好地保护用户的facebook访问令牌)。

我无法保证这种方法的美观,但它可以工作,并可以与许多其他供应商一起使用。由于Facebook访问令牌停留在同一个生态系统中,我很确定这并不违反Facebook的TOS。我没有看到任何反对它的东西。