【问题标题】:Access Token expire time with offline_access permission具有离线访问权限的访问令牌过期时间
【发布时间】:2023-04-05 18:31:01
【问题描述】:

Facebook 权限页面对offline_access 进行了如下说明:

使您的应用程序能够代表代表执行授权请求 用户随时。默认情况下,大多数访问令牌在 短时间确保应用程序仅代表提出请求 当用户积极使用应用程序时。这 权限使我们的 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权限的url响应如下:

access_token=.....&expires=5462

但使用offline_access 权限仅响应access_token。我不明白,facebook 说它的寿命很长,但寿命有多长?

如何了解具有offline_access 权限的访问令牌何时过期?

【问题讨论】:

  • 请注意,此支持将很快被弃用,On October 3, 2012, the offline_access permission will be removed

标签: facebook


【解决方案1】:

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 响应相比),因此请准备好解析响应。我选择了 PHP 的 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 访问令牌调试器检查您的代码是否正常工作。如果正确更换,到期日期应该是当前的 60 年。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,我阅读了 facebook 文档,它的文字很长寿,然后我想它的寿命有多长,但我在 facebook 论坛中发现了这个问题。他们说永不过期。非常感谢,顺便说一句英语不是我的主要语言。 :)
    • 物有所值;他们确实过期了。但是,令牌过期的不是 TIME,而是用户操作。当用户更改密码时,他们的访问令牌也会更改。
    • 根据this link,这仅在 2012 年 7 月 5 日之前有效
    • 现在在新的 api 中离线访问被删除,令牌仅返回 60 天
    【解决方案3】:

    令牌将过期,

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

    offline_access 不再存在!

    =[

    【讨论】:

      【解决方案4】:

      offline_access 权限已被弃用,并已于 2012 年 12 月 5 日删除 现在需要定期更新访问令牌。流程详解here

      弃用 roadmap 在这里。

      【讨论】:

        猜你喜欢
        • 2013-06-30
        • 2011-12-19
        • 2013-09-18
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 2019-12-19
        相关资源
        最近更新 更多