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

70

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

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

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

有人知道页面访问令牌的有效期有多长吗?在Facebook网站上我只能找到这个简洁的段落,它没有提到任何关于过期的信息。

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

我之所以问这个问题,是因为我想知道应该多久查询一次Facebook Graph API并获取页面访问令牌。我应该在用户注册时仅请求一次吗?还是在每个API调用中都请求一次以防它们不断更改?后者显然更费力!


2
+1 很好的问题,而且写得也很好。如果你还没有在 Facebook 开发者群组中发布这个问题,你应该把它放上去。 - bool.dev
1
对于一个好问题点赞。这个问题应该被添加到Facebook开发者群组,并且你应该提出请求将其添加到文档中。我的直觉告诉我,这些令牌会像用户访问令牌一样随着时间的推移而改变。希望有人能从经验上说话。 - Andrew Cox
非常好的问题。我也想知道关于你的问题的正确解决方案。 - Frank Myat Thu
这个问题我们有答案了吗?如果它们过期了,有没有办法检查令牌还剩多少时间? - atwellpub
8个回答

42
Page Tokens(页面访问令牌)是由某个用户的访问令牌生成的,当该用户的访问令牌过期时,页面访问令牌也会过期。如果你延长了用户访问令牌的有效期并获得了该用户的新页面访问令牌,那么该页面访问令牌只有在用户取消授权你的应用之后才会过期(2013年6月28日进行了编辑)。
现在已经不再推荐使用离线访问,但你可以将访问令牌延长至60天。如果你延长了用户的访问令牌,则从该用户帐户生成的页面令牌将不会过期,其到期时间将被延长(2013年6月28日进行了编辑)。页面令牌的值在延长后可能会发生变化,所以一定要在延长用户访问令牌后从用户的/accounts图连接中获取新的页面令牌。
你可以每天继续延长这些访问令牌一次。因此,每天用户与你的应用互动时,你应该重新生成访问令牌。
参考链接:https://developers.facebook.com/docs/facebook-login/access-tokens/#pagetokenshttps://developers.facebook.com/docs/facebook-login/access-tokens/#extendinghttps://developers.facebook.com/docs/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/

3
对此答案点赞。以下是确认方法。首先创建一个新的应用程序并启用离线访问迁移。其次图形API资源管理器中为该应用程序授予manage_pages的访问令牌。第三,在/me/accounts查找您的页面访问令牌。最后使用调试控制台检查访问令牌的过期时间。确实,在迁移后,页面访问令牌将在1小时后过期,而不是无限期持续。是时候更改您的应用程序了! - logan
1
此外,如果您尝试交换页面访问令牌(而不是交换用户访问令牌),则会收到此错误 {"error_code":1,"error_msg":"发生未知错误"} - logan
但是在这里:https://developers.facebook.com/roadmap/offline-access-removal/#page_access_token我读到“通过使用长期的用户访问令牌,查询[User ID]/accounts端点现在将提供不会过期的页面访问令牌,用于用户管理的页面。”这是否意味着它们永远不会过期? - Glooh
我对这个答案进行了一些编辑,更新了链接,并指出在扩展用户访问令牌后检索到的页面令牌不再过期。我还点赞了@Simon.Ponder的回答,非常好。 - rmarscher
@TejasManohar 这里是关于扩展访问令牌的最新文档 - https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension 希望对你有所帮助。 - rmarscher
显示剩余5条评论

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/accounts发出GET请求。这将再次返回您配置的页面列表。

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

更新

我还发现Facebook的图形浏览器有时会混淆用户环境,并且可能并不总是可靠。替代方案是FiddlerPostman


1
我从来不看那些"开发者之爱"的文章,因为它们让我的手心出汗...但是多亏了你,现在我终于可以放心休息了,不再需要每天更新那个可恶的“页面访问令牌”以使我的定时任务能够运行... :) - rapcal
@Simon.Ponder:你知道这个永不过期的令牌是否也适用于获取用户流(或其他公共流)吗?我可以等两个月再试,但宁愿得到更快的答案。谢谢。 - user429620
这些令牌是供管理员批准的应用程序使用的,但除此之外,它们的功能与任何其他页面访问令牌完全相同。如果您询问访问页面的任何用户,则必须从每个用户那里获得批准。 - Simon.Ponder
@Simon.Ponder 谢谢您,谢谢您,谢谢您提供的不会过期的令牌。 - whitesiroi

4

我不确定Facebook是否已经修复了这些漏洞,但似乎一旦为用户授予页面访问令牌,用户访问令牌就不会过期。根据我的测试,流程如下:

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

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

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


回答我自己的问题,是的,这仍然有效。但是,如果用户没有任何页面,则无法正常工作(我想这很合理)-是否有办法使此功能适用于没有页面的用户? - user429620
是的,这仍然是情况。为了安全起见,我将使用页面访问令牌,以防Facebook决定修复此问题并使用户访问令牌无效。 - ozren1983

2
Facebook页面访问令牌与用户访问令牌非常相似,除了“它会冒充用户”作为管理员访问该页面并允许管理它[需要manage_page权限]。 如果应用程序被授予Offline_access权限,则页面访问令牌将不会过期(除非用户更改其密码或手动取消授权该应用程序)。
使用以下链接检查已发出的访问令牌的详细信息。 https://developers.facebook.com/tools/debug/

你从哪里得到的信息,关于当用户更改密码时页面访问令牌会过期?不是我不相信你,但如果这是基于未记录的行为,我怀疑这可能会发生变化(比记录的行为更加频繁地发生变化:)) - Tom Lianza
你说的没错。Facebook中的任何事情都可能在没有事先通知的情况下随时更改。这是在描述访问令牌功能的部分中发现的(这是一个常见的描述)。我也使用了上面的链接进行了测试,证明它是有效的。但像你说的,也许将来会有所改变。 - Robin
4
这个答案已经过时。请查看@rmarscher关于offline_access被弃用的回答。 - logan

1
Facebook在长期页面访问令牌问题上的文档与实际情况不符。文档声称通过扩展/长期用户访问令牌获取的页面访问令牌永远不会过期。然而,实际上这些页面访问令牌在60天后就会过期。
请参阅Facebook漏洞:http://developers.facebook.com/bugs/461517520524921

1
  • 默认页面访问令牌是短期的,因此在1或2小时后过期。如果您想使其持续更长时间,则需要将短期访问令牌延长为长期访问令牌,以便它持续大约2个月。
  • 权限offline_access现已弃用。
  • 当用户更改密码时,访问令牌不会过期。

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


1

0

当用户的访问令牌过期时,页面访问令牌也会过期。您可以延长用户访问令牌的有效期,最长可达60天,以使页面访问令牌保持长久。

请查看我的博客,并按照逐步说明获取扩展访问令牌和获取粉丝页访问令牌。


4
欢迎来到Stack Overflow!感谢您发布答案!请务必仔细阅读有关自我推广的常见问题解答。另外,请注意,每次链接到您自己的网站/产品时,必须发布免责声明。此外,请勿发布缩短/混淆的URL;人们应该能够看到他们的点击会导向哪里。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接