2013-06-24 117 views
4

这个主题是非常难以谷歌,因为一些不幸的术语的选择,所以这里有一个快速的澄清之前,我问我的问题:如何让Facebook _Account_(即页面)访问令牌永不过期?

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

FACEBOOK报表&实际观察:

的Facebook,在这个岗位(https://developers.facebook.com/roadmap/offline-access-removal/),说几件事情:

  1. ,有两种类型的access_tokens的:似乎真:实际观察“而短命用户access_tokens目前从1至2小时的有效长寿命的用户会的access_token的有效期为60天”。我的应用程序只在服务器端,所以我不能确认短的类型。

  2. “如果从服务器端的OAuth调用生成的的access_token,所产生的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] /帐户端点现在将提供不会过期的页面访问令牌。“ 实际观察:我的应用程序检索到的令牌(使用原始根,60天令牌)将在60天后过期,当它们应该是无限的。每#3,我不能尝试与新的,不同的(据推测扩展)访问令牌,因为它是无效的。

问题:

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

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

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

任何帮助将非常感谢!


给管理员的注意事项:在禁用这个问题之前,如果没有足够的“代码导向”,Facebook会将所有问题都指向Stack Exchange。 https://developers.facebook.com/support/如果我不能在这里问这个问题,那我会问这个问题?


UPDATE:检查令牌的有效性的官方支持的方式是 如下:

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

当我用这个方法,应用程序令牌我已经得到了我的用户应该显示“0”的到期。所以我猜他们是无限的。我不可能知道,直到60天过去了,FB是否用“过期”来说实话:0;

+0

你有没有搞清楚,如果页面级别的令牌会过期吗? Facebook的api文档建议,但它不是100%清楚 – NullReference

+1

我认为“更新”部分的伎俩。我的应用程序不再活动,所以我不能肯定地说,但我认为它们没有过期。 – fivedogit

回答

1

第一篇文章,忍受着我。

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

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

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

当您尝试扩展长寿命令牌时,Facebook会向您发送一个短暂的刷新令牌。当您获取此刷新标记时,可以使用登录流中的标记从Facebook获取另一个扩展标记的方式。

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

0

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

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}