由于一些不幸的术语选择,这个话题对谷歌来说非常困难,所以在我问我的问题之前,这里有一个快速的澄清:
Facebook 帐户(即个人的顶级个人帐户)可以有子帐户(公司、品牌、名人等),不幸的是 Facebook 将其称为“帐户”。与这些“帐户”交互的端点位于 [user id]/accounts。出于这个问题的目的,我将这些称为“子帐户”
脸书声明和实际观察:
Facebook 在这篇文章 ( https://developers.facebook.com/roadmap/offline-access-removal/ ) 中说了几件事:
有两种类型的 access_tokens:“长期用户 access_token 的有效期为 60 天,而短期用户 access_tokens 目前的有效期为 1 到 2 小时”实际观察:似乎是真的。我的应用程序只做服务器端,所以我无法确认短类型。
“如果 access_token 是从服务器端 OAuth 调用生成的,则默认情况下生成的 access_token 将具有更长的到期时间”实际观察:我的服务器端应用程序确实会产生更长的 60 天到期时间。
“当从 ... 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 端点在尝试使用时返回身份验证失败。
“当用户授予应用程序 manage_pages 权限时,应用程序能够通过查询 [User ID]/accounts 获取用户管理的页面的页面访问令牌......通过使用长期用户访问令牌,查询 [用户 ID]/accounts 端点现在将提供不会过期的页面访问令牌。” 实际观察:我的应用程序检索到的页面访问令牌(使用原始、根、60 天令牌)将在 60 天后过期,而它们应该是无限的。根据 #3,我不能使用新的、不同的(据说是扩展的)访问令牌来尝试这个,因为它是无效的。
问题:
我的服务器端请求生成有效期为 60 天的令牌。请求扩展令牌应该回显相同的令牌,但不会。为什么不?
我要回来的新的、不同的令牌根本不起作用。为什么不?
如果我的应用程序获得的原始访问令牌是 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 说真话;