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


70

我正在开发一个允许用户管理其Facebook粉丝页面的应用程序。这需要以下两个访问令牌:

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

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

有人知道页面访问令牌保持有效的时间吗?我在Facebook网站上只能找到这个简洁的段落,没有提到它的有效期。

我是否可以假设如果我请求具有offline_access权限的用户访问令牌,则页面访问令牌也将无限期使用(除非用户更改密码或手动取消对我的应用的授权)?

我之所以问是因为我想知道我应该多久查询一次Facebook Graph API并获取页面访问令牌。用户注册时,我是否应该只请求一次?还是我应该在每个API调用不断变化的情况下要求它们一个?后者显然更加费劲!


2
+1好问题,也写得很好。如果还没有的话,还应该将它放在Facebook上的Facebook开发人员组中。
bool.dev 2011年

1
+1是一个好问题。绝对应该将其添加到Facebook开发人员组,并且您应该生成一个请求以将其添加到文档中。我的直觉是,这些令牌将随着用户访问令牌随时间的变化而变化。希望有人可以从经验中发言。
Andrew Cox

很好的问题。我也想知道有关您问题的适当解决方案。
Frank Myat 2012年

我们对此有答案吗?如果它们确实到期,是否有办法检查令牌还剩多少时间?
atwellpub 2013年

Answers:


42

当生成页面令牌的用户的访问令牌过期时,页面令牌也会过期。 编辑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:// developers .facebook.com / docs / facebook-login /
https://developers.facebook.com/roadmap/offline-access-removal/ https://developers.facebook.com/blog/post/2011/05/13/how -处理过期的访问令牌/


3
为此答案+1。这是确认方法。首先创建一个新的应用程序并启用offline_access迁移。其次manage_pagesgraph api资源管理器中为该应用授予访问令牌。第三,在上查找您的页面访问令牌/me/accounts最后,使用调试控制台检查访问令牌的有效期。实际上,在迁移之后,页面访问令牌将在1小时后过期,而不是无限期地持续。是时候更改您的应用了!
logan 2012年

"the page tokens generated from that user account will also have their expiration extended to match"有点误导。通过扩展用户的访问令牌,不会增加现有页面访问令牌的到期时间。相反,在扩展了用户的访问令牌后,您可以从/me/accounts
logan 2012年

谢谢@logan。我更新了响应,以注意页面访问令牌可能会更改。来自developers.facebook.com/roadmap/offline-access-removal"If the access_token was originally generated from a client-side OAuth call or through a signed_request, the endpoint will actually return a new access_token." 因此,我认为自从您使用图api资源管理器进行测试以来,访问令牌是在客户端生成的,因此在扩展后会更改。
rmarscher 2012年

1
另外,如果您尝试交换页面访问令牌(而不是交换用户访问令牌),则会收到此错误{"error_code":1,"error_msg":"An unknown error occurred"}
logan 2012年

但是在这里:developers.facebook.com/roadmap/offline-access-removal/… 我读到“通过使用长期存在的用户访问令牌,查询[User ID] / accounts端点现在将提供不会过期的页面访问令牌用户管理的页面。”。这是否意味着它们永远不会过期?
格洛

12

您可以扩展页面访问令牌以使其永不过期。文档有些混乱,但是以下页面具有相关信息,您显然需要成为页面管理员。在第二个链接上密切注意方案4和5。

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

使用图浏览器从Facebook检索令牌很简单。图资源管理器还允许您调试令牌,该令牌将列出到期日期,因此您可以验证它永不到期。图资源管理器:https : //developers.facebook.com/tools/explorer

单击“获取访问令牌”按钮以检索您的令牌。将您的ID保留在查询栏中,只需将/ accounts添加到您的ID中即可,使其看起来像这样:/123456789101112/accounts。确保它是一个GET请求(查询栏左侧的下拉列表)。

这将检索您配置为使用的所有页面。然后,您需要发出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可以在应用程序管理设置中找到。使用您的个人访问令牌作为最终参数(EXISTING_ACCESS_TOKEN)。这将返回60天的个人访问令牌。将此令牌复制到查询栏上方的“访问令牌”栏中。现在像开始时一样向USER_ID /帐户发出GET请求。这将再次返回您配置为使用的页面列表。

但是这一次与页面一起列出的页面令牌不会过期。您可以通过将页面令牌复制到“访问令牌”栏中并单击“调试”按钮来进行检查。这将为您提供有关该访问令牌的详细信息,包括到期时间,在这种情况下,永远不要这样。

更新

我还发现,Facebook的图形资源管理器有时会与用户上下文混淆,并且可能并非始终可靠。替代品是FiddlerPostman


1
我从来没有看过那些《 Operation Developer Love》的帖子,因为它们使我大汗淋漓……但是多亏了您,现在我终于可以休息了很长时间了,不得不每天更新邪恶的“页面访问令牌”,然后再执行cron作业。 :)
rapcal

@ Simon.Ponder:您知道这个永不过期的令牌是否也可以获取用户的流(或其他公共流)吗?我可以等待两个月才能尝试,但宁愿有一个更快的答案。thx

这些令牌用于管理员将批准的应用程序,但除此之外,它们的功能与任何其他页面访问令牌完全相同。如果您询问访问该页面的任何用户,则必须获得每个用户的批准。
Simon.Ponder 2013年

@ Simon.Ponder谢谢,谢谢,感谢您的令牌没有过期。
whitesiroi

4

我不确定Facebook是否进行了更改以解决这些错误,但是,一旦为用户授予了页面访问令牌,用户访问令牌似乎就不会过期。根据我的测试,流程如下所示:

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

希望这能消除这里的一些困惑。我已经在我们的应用程序中对许多不同的用户进行了测试,并且每次都看到相同的内容。

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


回答我自己的问题,是的,这仍然有效。但是,如果用户没有任何页面,则无法正常工作(我想这是有道理的)-有什么方法可以让没有页面的用户使用它吗?

是的,情况仍然如此。为了确保Facebook决定解决此问题并使用户访问令牌无效,我将使用页面访问令牌来确保安全。
ozren1983

2

Facebook页面访问令牌与用户访问令牌非常相似,不同之处在于“它模仿用户”是页面的管理员,并允许对其进行管理[需要manage_page权限]。

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

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

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


如果用户更改了密码,从哪里获得有关页面访问令牌到期的信息?并不是我不相信您,但是,如果它基于未记录的行为,我怀疑它可能会有所变化(比记录的行为还要多,而且还会一直发生变化:))
Tom Lianza 2012年

:)你说的是对的。任何内容都可以在Facebook上随时更改,恕不另行通知。:)这在描述访问令牌功能的部分中找到(这是常见描述)。我还使用上面的链接进行了测试,事实证明该链接是有效的。但是就像你说的那样,将来可能会改变。
罗宾

4
这个答案已经过时了。请参阅@rmarscher关于不赞成使用offline_access的答案。
logan 2012年


1

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

参见Facebook错误:http//developers.facebook.com/bugs/461517520524921


1
  • 默认页面访问令牌是短暂的,因此它们将在1或2个小时内过期。如果要使其寿命更长,则需要将短命的令牌扩展到长命的访问令牌,这样它将持续大约2个月。
  • offline_access现在已弃用该权限。
  • 当用户更改为密码时,访问令牌不会过期。

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


0

当用户的访问令牌过期时,页面访问令牌也会过期。您可以将用户访问令牌的使用期限延长至60天,以使页面访问令牌的使用期限较长。

查看我的博客,并按照逐步说明获取扩展访问令牌以及获取扇页访问令牌。


4
欢迎使用Stack Overflow!感谢您发布答案!请务必仔细阅读有关自我促销常见问题解答。还请注意,每次链接到您自己的站点/产品,您都必须发布免责声明。另外,请勿发布简短/混淆的网址;人们应该能够看到他们的点击将在何处结束。
安德鲁·巴伯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.