【问题标题】:How to get Facebook _Account_ (i.e. Page) access tokens that never expire?如何获得永不过期的 Facebook _Account_(即页面)访问令牌?
【发布时间】:2013-06-21 09:04:19
【问题描述】:

由于一些不幸的术语选择,这个话题对谷歌来说非常困难,所以在我问我的问题之前,这里有一个快速澄清:

Facebook 帐户(即一个人的顶级个人帐户)可以有子帐户(公司、品牌、名人等),不幸的是 Facebook 将其称为“帐户”。与这些“帐户”交互的端点位于 [user id]/accounts。出于这个问题的目的,我将这些称为“子帐户”

Facebook 声明和实际观察:

Facebook 在这篇文章 (https://developers.facebook.com/roadmap/offline-access-removal/) 中说了几件事:

  1. 有两种类型的 access_tokens:“长期用户 access_token 的有效期为 60 天,而短期用户 access_tokens 目前的有效期为 1 到 2 小时”实际观察: 似乎是真的。我的应用只做服务器端,所以无法确认短类型。

  2. “如果 access_token 是从服务器端 OAuth 调用生成的,则默认情况下,生成的 access_token 将具有更长的过期时间” 实际观察:我的服务器端应用程序确实会产生更长的时间, 60 天到期。

  3. “当从 ...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 请求扩展 access_token 时 ...如果您传递一个具有长期过期时间的 access_token,端点将简单地将相同的 access_token 传递给您,而无需更改或延长到期时间”实际观察:在我的情况下不是这样。当我通过原始的 60 天令牌时,我会得到一个不同的令牌。此外,新的、不同的令牌根本不起作用。 FB 端点在尝试使用时返回身份验证失败。

  4. “当用户授予应用程序manage_pages权限时,应用程序能够通过查询[用户ID]/帐户来获取用户管理的页面的页面访问令牌...通过使用长期用户访问令牌,查询 [User ID]/accounts 端点现在将提供不会过期的页面访问令牌。” 实际观察:我的应用检索到的页面访问令牌(使用原始、根、60 天令牌)将在 60 天后过期,而它们应该是无限的。根据 #3,我不能尝试使用新的、不同的(据说是扩展的)访问令牌,因为它是无效的。

问题:

  1. 我的服务器端请求生成有效期为 60 天的令牌。请求扩展令牌应该回显相同的令牌,但不会。为什么不呢?

  2. 我得到的新的、不同的令牌根本不起作用。为什么不呢?

  3. 如果我的应用程序获得的原始访问令牌是长的 60 天类型,那么我使用它们检索的 PAGE 访问令牌应该不会过期。但它们确实会过期。为什么?

任何帮助将不胜感激!!!


版主注意事项:在因为不够“面向代码”而禁用此问题之前,Facebook 将所有问题指向 Stack Exchange。 https://developers.facebook.com/support/如果我不能在这里问这个问题,那我去哪里问呢?


更新:官方支持的检查令牌有效性的方法是 如下:

graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}

当我使用此方法时,我为我的用户获得的应用令牌显示为“0”到期,因为它们应该。所以我猜他们是无限的。直到 60 天过去了,我才能确定 FB 是否用 "expires":0 说真话;

【问题讨论】:

  • 您是否知道页面级令牌是否过期? Facebook 的 api 文档建议但不是 100% 清楚
  • 我认为“更新”部分起到了作用。我的应用不再处于活动状态,所以我不能确定,但​​我认为它们没有过期。

标签: facebook facebook-graph-api


【解决方案1】:

第一次发帖,请多多包涵。

取自:https://developers.facebook.com/docs/facebook-login/access-tokens/

即使是长期存在的访问令牌最终也会过期。在任何时候,您都可以通过将人员发送回您的应用程序使用的登录流程来生成新的长期令牌 - 请注意,此人实际上不需要再次登录,他们已经授权您的应用程序,因此他们将立即使用刷新的令牌从登录流程重定向回您的应用程序 - 人们对此的显示方式将根据您使用的登录流程类型而有所不同,例如,如果您使用的是 JavaScript SDK,这将发生在背景,如果您使用的是服务器端流程,浏览器将快速重定向到登录对话框,然后自动立即再次返回您的应用程序。

完成上述操作后,您将获得一个新的短期令牌,然后您需要执行与上述相同的长期令牌交换。

当您尝试扩展长期令牌时,Facebook 会向您发送一个短期刷新令牌。当您获得此刷新令牌时,可以像使用登录流程中的令牌从 Facebook 获取另一个扩展令牌一样使用它。

对于您的第三个问题,主页访问令牌必须使用主页管理员的用户令牌,以便您能够代表主页接收授权。如果您在刷新页面令牌时遇到问题,请检查您的应用关于重新身份验证的权限。

【讨论】:

    【解决方案2】:

    不,您无法获得长期访问令牌,因为它们会在一段时间后过期。最近 Facebook 升级了他们的 Graph API 版本 v-2.9 。 其中一个只能通过以下 Api 将其寿命延长到 60 天:

    https://graph.facebook.com/oauth/access_token?client_id={your-client-id}&client_secret={client-secret}&grant_type=fb_exchange_token&fb_exchange_token={previous-access-token}
    

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 2013-06-29
      • 2023-03-30
      • 2012-09-05
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多