4

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

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

脸书声明和实际观察:

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 权限时,应用程序能够通过查询 [User ID]/accounts 获取用户管理的页面的页面访问令牌......通过使用长期用户访问令牌,查询 [用户 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 说真话;

4

2 回答 2

1

第一次发帖,多多包涵。

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

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

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

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

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

于 2013-06-24T19:15:13.620 回答
0

不,您无法获得长期访问令牌,因为它们会在一段时间后过期。最近 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}
于 2017-07-13T06:42:20.400 回答