Facebook OAuth2访问令牌到期后刷新的正确方法是什么?

mtj*_*hax 53 facebook facebook-graph-api oauth-2.0

据我了解,这是使用OAuth2 API的新Facebook iframe画布应用程序的基本过程:

  1. 重定向到(或具有用户点击链接)应用程序的授权URL
  2. 用户授权并重定向到您的回调URL
  3. Callback使用"code"参数来获取访问令牌
  4. 访问令牌与Graph API一起使用来提取或推送信息

问题是访问令牌过期相对较快并且需要"刷新",所以我的问题是1)除了尝试使用它并简单地得到错误之外,你如何检测到令牌已经过期?2)获得新令牌的最佳做法是什么?

目前,我只是检测到尝试使用其访问令牌获取用户信息时出错,然后再次重定向到授权URL - 因为他们已经授权应用程序空白页闪烁并且他们被重定向回我的应用程序回调我得到一个新鲜的令牌.它太笨重了我无法相信这是正确的方法.

Nat*_*ten 41

  1. 判断cookie是否有效的唯一方法是使用它并在错误时捕获错误.没有轮询方法或任何东西来检查令牌是否有效.

  2. 要获取新令牌,只需将用户重定向到身份验证页面即可.因为他们已经授权您的应用程序,他们会立即被重定向回您的应用程序,您将获得一个新令牌.他们不会被提示允许,因为他们已经这样做了.

简而言之,这没有任何窍门.你已经正确地做了.

  • 我怀疑这是答案,但我觉得发布这个问题并得到一些答复非常重要.关于访问令牌过期和iframe问题有很多重复的帖子,但没有人询问Facebook文档所掩盖的这个特定问题.在一两天之后,我会给你点头的最佳答案让人们插话,谢谢. (3认同)
  • 我知道这有点旧,所以它现在可能不重要,但您可以使用Facebook状态URL(来自Facebook API获取会话状态) (2认同)

log*_*gan 26

最近,facebook对访问令牌进行了一些更改,允许他们定期刷新.

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 
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请访问:https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal

  • 但似乎它只适用于具有短期令牌的新应用程序.对于使用长期令牌的现有应用程序,它没有帮助.[你传递了一个具有长期过期时间的access_token,端点只会将相同的access_token传回给你,而不会改变或延长过期时间.] (4认同)