使用offline_access权限访问令牌过期时间

时间:2011-03-01 13:59:46

标签: facebook

Facebook权限页面说明了有关offline_access的信息:

  

使您的应用程序能够代表执行授权请求   用户随时。默认情况下,大多数访问令牌在a之后到期   短时间内确保应用程序仅代表请求   当用户正在使用该应用程序时。这个   权限使我们的OAuth端点返回访问令牌   长寿命。

然后我读了这个主题http://developers.facebook.com/docs/authentication/

试过这个:

https://graph.facebook.com/oauth/access_token

 client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
 client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

这个没有offline_access权限的网址响应如下:

access_token=.....&expires=5462

但是使用offline_access权限只响应access_token。我不知道这个,facebook说它的寿命很长,但有多久了?

如何通过offline_access权限过期访问令牌?

4 个答案:

答案 0 :(得分:7)

Facebook引入了一个新的端点,允许开发人员将通用访问令牌(约2小时的生命周期)扩展到60天的令牌。它就像发送HTTP GET一样简单:

https://graph.facebook.com/oauth/access_token?             
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN

响应有点不稳定(与正常的JSON响应相比),因此请准备解析响应。我选择了PHPs parse_url函数。

// url to curl (note: make sure you pass in the correct values for your app
// and the user access token you'd like to exchange.
$url = 'https://graph.facebook.com/oauth/access_token?client_id=$fb_app_id&client_secret=$fb_app_secret&grant_type=fb_exchange_token&fb_exchange_token=$access_token;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);

curl_close($ch);

// parse response
parse_str($response, $token_data);

// exchanged token
$access_token = $token_data['access_token'];

echo 'exchanged access token: ' . $access_token;

一旦你有了交换的令牌,请转到Facebook Access Token Debugger检查你的代码是否正常工作。如果交换得当,到期日应该是当前的60。

https://developers.facebook.com/tools/debug

如果您担心您的访问令牌过期,您可以检查运行时的到期时间,并在过期时间即将到来时调用新的60天访问令牌。每次用户访问时,效率较低(但更简单)的方法是交换您的令牌。

答案 1 :(得分:4)

使用offline_access权限时返回的访问令牌永不过期。

编辑:根据文档,令牌是“长寿”。我假设你只需处理他们不再工作的情况(如果发生这种情况)。

答案 2 :(得分:2)

令牌将过期,

根据facebook的新政策: https://developers.facebook.com/roadmap/offline-access-removal/#extend_token

offline_access已经不在了!

= [

答案 3 :(得分:2)

已弃用offline_access权限,自2012年12月5日起已将其删除 现在需要定期更新访问令牌。该流程详细here

弃用roadmap就在这里。