【问题标题】:Facebook: Refreshing long-lived access token automaticallyFacebook:自动刷新长期访问令牌
【发布时间】:2014-09-06 03:36:13
【问题描述】:

我正在为我的应用程序的用户存储长期访问令牌,这些用户已将他们的 Facebook 帐户与其关联。自 offline_access 令牌消亡以来,这些长期存在的令牌的有效期为“大约 60 天”。但是,当用户与 Facebook 交互时,它们可以刷新自己。根据documentation

当使用您的应用的人向 Facebook 的服务器发出请求时,这些令牌将每天刷新一次。如果没有请求,令牌将在大约 60 天后过期,此人将不得不再次通过登录流程来获取新令牌。

我想知道向 Facebook 的服务器发出请求的构成。用户是否必须登录 Facebook 网站、移动应用或在某处使用“赞”按钮?还是我的应用程序代表用户提出请求也算在内?

另外,刷新令牌时,它们会再刷新 60 天吗?还是刷新时间更短?

我无法在文档或此处提出的其他问题中找到这些具体答案,因此提前感谢任何可能了解更多详细信息的人。

【问题讨论】:

  • 你有没有想过这个问题?我遇到了一个问题,iOS SDK 似乎没有刷新长期存在的令牌,而且我的用户每 60 天就会注销一次。
  • 我不记得我是否设法修复它。我想我实现了一个过程,如果操作失败是因为令牌已过时或被撤销,应用程序将尝试使用刷新令牌更新它。如果失败,我不得不要求用户将他/她的帐户与我的应用程序重新关联。不是一个很好的解决方案,但我当时能做到的最好。

标签: facebook facebook-graph-api oauth-2.0 facebook-oauth


【解决方案1】:

您粘贴的前一行很重要: Native mobile applications using Facebook's SDKs will get long-lived access tokens, good for about 60 days

您提取的部分仅指使用 Facebook SDK 的 iOS 和 Android 应用程序 - SDK 进行 API 调用以扩展令牌,该令牌仅适用于 SDK 和本机移动 SDK 生成的令牌 -

其他应用程序(例如网站、facebook.com 上的应用程序)需要使用文档中其他地方记录的登录流程,并要求用户在浏览器中登录 Facebook

【讨论】:

  • 你说的很对。我一定把那部分和下面讨论 Web 访问令牌的部分混在一起了。
  • 好的,但是 SDK 会每天获得一个新的令牌,还是 fb 服务器会延长当前令牌的有效期?
【解决方案2】:

每次您使用 Facebook SDK 进行任何 Graph API 调用时,都会刷新令牌。您可以在他们的源代码中看到这一点,在 AccessTokenManager 中有函数 extendAccessTokenIfNeeded(),该函数在 GraphRequest在函数executeConnectionAndWait()中。

您也可以通过调用手动刷新令牌:

AccessToken.refreshCurrentAccessTokenAsync();

我发现了一个例外。只能刷新 sso 令牌,这意味着如果用户通过 facebook 应用程序登录到您的应用程序。如果用户通过浏览器登录,令牌将保持不变。

【讨论】:

  • 文档很糟糕。 StackOverflow 上有几十个关于 Facebook 令牌刷新的问题,而这个答案是我目前找到的唯一一个好答案
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 2018-09-07
  • 2014-02-27
  • 2015-11-17
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多