如何让Facebook _Account_(即Page)访问永不过期的令牌?

时间:2013-06-24 18:34:48

标签: facebook facebook-graph-api

由于一些不幸的术语选择,谷歌的这个主题非常难以实现,因此在我提出问题之前,请先快速澄清一下:

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

FACEBOOK语句&实际观察:

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

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

  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端点时,FB端点会返回身份验证失败。

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

  5. 问题:

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

    2. 我回来的新的,不同的令牌根本不起作用。为什么不呢?

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

    4. 任何帮助都将非常感谢!!!


      主持人请注意:在禁用此问题以使其不充分“面向代码”之前,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是否用“过期”说出真相:0;

2 个答案:

答案 0 :(得分:1)

第一篇文章,请耐心等待。

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

  

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

     

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

当您尝试扩展长期令牌时,Facebook会向您发送一个短暂的刷新令牌。当您获得此刷新令牌时,它的使用方式与登录流中的令牌用于从Facebook获取另一个扩展令牌的方式相同。

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

答案 1 :(得分:0)

不,你不能获得Long live访问令牌,因为它们将在一段时间后过期。最近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}