Facebook页面访问令牌 – 这些过期吗?

我正在构build一个允许用户pipe理他们的Facebook粉丝页面的应用程序。 这需要以下两个访问令牌:

  1. 用户访问令牌
  2. 页面访问令牌

我对用户访问令牌非常熟悉,但对页面访问令牌不是很熟悉。

有人知道页面访问令牌保持有效多久吗? 我在Facebook上能find的就是这个简洁的段落 ,它没有提到任何有关过期的事情。

我可以假设,如果我要求具有offline_access权限的用户访问令牌,页面访问令牌也将无限期地持续(除非用户更改密码或手动取消授权我的应用程序)?

我问,因为我想知道我应该多久查询一下Facebook Graph API并获取页面访问令牌。 当用户注册时,我应该只需要一次吗? 还是我应该要求他们每个API调用一旦他们不断变化? 后者显然是更多的征税!

访问令牌到期后,页面令牌从用户生成页面令牌到期。 编辑6.28.2013:如果扩展用户访问令牌并为用户获取新的页面访问令牌 ,那么除非用户取消授权您的应用,否则该页面令牌不会过期。

离线访问已被弃用,但您可以将访问令牌延长60天。 如果您扩展用户的访问令牌,那么从该用户帐户生成的页面标记也将延长到匹配的过期将不会过期(编辑6.28.2013)。 页面标记的值在扩展后可能会更改,因此请确保在扩展用户标记之后从用户的/accounts图表连接中获取新的页面标记。

您可以继续每天一次扩展这些访问令牌。 因此,您应该每天重新生成用户与您的应用交互的访问令牌。

请参阅https://developers.facebook.com/docs/facebook-login/access-tokens/#pagetokens https://developers.facebook.com/docs/facebook-login/access-tokens/#extending https://开发人员.facebook.com /文档/ Facebook的login/
https://developers.facebook.com/roadmap/offline-access-removal/ https://developers.facebook.com/blog/post/2011/05/13/how-to–handle-expired-access-tokens /

您可以扩展页面访问令牌,使其永不过期。 文档有点混乱,但以下几页有相关的信息,你显然需要成为页面的pipe理员。 在第二个链接中密切关注场景4和5。

https://developers.facebook.com/docs/reference/api/page/#page_access_tokens https://developers.facebook.com/roadmap/offline-access-removal/#page_access_token

使用graphics浏览器从Facebook检索令牌是很简单的。 图表浏览器还允许您debugging将列出过期date的令牌,因此您可以validation它永不过期。 图表资源pipe理器: https : //developers.facebook.com/tools/explorer

点击获取访问令牌button来检索您的令牌。 保持您的ID在查询栏,只需追加/帐户到您的ID,以便它看起来像这样: /123456789101112/accounts 。 确保它是一个GET请求(查询栏左边的下拉列表)。

这将检索您configuration使用的所有页面。 然后你需要做一个GET请求来:

 /oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN 

您的APP_ID和APP_SECRET可以在您的应用程序pipe理设置中find。 使用您的个人访问令牌作为最终参数(EXISTING_ACCESS_TOKEN)。 这将返回60天的个人访问令牌。 将此令牌复制到查询栏上方的Access令牌栏中。 现在就像我们开始时那样向USER_ID /帐户发出GET请求。 这将再次返回您configuration使用的页面列表。

但这一次页面列出的页面标记不会过期。 您可以通过将页面令牌复制到访问令牌栏并单击debuggingbutton来检查。 这将为您提供有关访问令牌的详细信息,包括过期时间,在此情况下永远不应该有这种情况。

UPDATE

我也发现Facebook的graphics浏览器有时会与用户上下文混淆,并且可能在任何时候都不可靠。 替代品是提琴手或邮差 。

发现有可能产生一个不会过期的Facebook页面访问令牌,对于所有寻求相同问题的人来说,下面是一个清晰的步骤:

  1. 确保你是你希望从中获取信息的FB页面的pipe理员
  2. 创build一个FB应用程序(应该是与页面pipe理员相同的用户帐户)
  3. 转到Facebook Graph API Explorer
  4. 在右上angular,从“应用程序”下拉列表中select您创build的FB应用程序
  5. 点击“获取用户访问令牌”(Orginally是“获取访问令牌”)
  6. 确保你添加了manage_pages权限
  7. 通过这个Graph API调用将这个短命的访问令牌转换成一个长期的访问令牌: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>

  8. 抓取返回的新的长期访问令牌

  9. 使用graphicsAPI调用,使用新的长期访问令牌查看您的帐户: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token> : https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. 抓取您将从中拉取信息的页面的access_token
  11. 把这个标记看成是过期的:从不!

这应该做到这一点。 你现在应该有一个Facebook页面访问令牌不过期! 这是为我工作。

我不知道,如果Facebook已经做了修改或修复这些错误,但似乎用户访问令牌不会过期,一旦页面访问令牌授予用户。 根据我的testingstream程如下所示:

  1. 请求的用户访问令牌 – > 60天的用户令牌被发出
  2. 请求的页面访问令牌 – >发布的页面访问令牌永不过期,并且初始用户访问令牌升级到永不过期。

希望这个清除一些混乱在这里。 我已经在我们的应用程序中与许多不同的用户进行了testing,每次都看到相同的东西。

如果从未请求页面访问令牌,则原始用户访问令牌将在60天后过期。

Facebook页面访问令牌与用户访问令牌非常相似,除了“模拟用户”作为页面的pipe理员并允许对其进行pipe理[需要manage_page权限]。

如果将Offline_access权限授予应用程序,页面access_token将不会过期 (除非用户更改其密码或手动取消对应用程序的授权)

使用以下链接检查发出的访问令牌的详细信息。

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

Facebook关于这个问题的文档(长期页面访问令牌)与实际情况不符。 该文件声称,通过长期/长期用户访问令牌获取的页面访问令牌永远不会过期。 但是,实际上,这些页面访问令牌在60天内过期。

查看Facebook的bug: http : //developers.facebook.com/bugs/461517520524921

  • 默认页面访问令牌是短暂的,所以它们在1或2个小时后过期。 如果要延长使用寿命,则需要将短命延长到长寿命的访问令牌,以便持续大约2个月的时间。
  • 现在不build议使用offline_access权限。
  • 当用户更改密码时,访问令牌不会过期。

在另一个问题,我解释如何扩展页面访问令牌 。

当用户的访问令牌过期时,页面访问令牌已过期。 您可以扩展用户访问令牌长达60天,以使页面访问令牌持续很长时间。

看看我的博客 ,按照逐步获取扩展访问令牌和获取粉丝页访问令牌的指令。