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

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

  1. redirect到(或让用户点击链接)应用的授权url
  2. 用户授权并被redirect到您的回叫url
  3. callback使用“code”参数来获取访问令牌
  4. 访问令牌与Graph API一起使用来提取或推送信息

问题是访问令牌过期相对较快,需要“刷新”,所以我的问题是:1)如何检测令牌已经过期,而不是尝试使用它,只是出现错误? 2)获得新的令牌的最佳做法是什么?

目前,我只是检测到有一个错误,试图获取用户的信息与他们的访问令牌,然后再次redirect到授权URL – 因为他们已经授权的应用程序空白页闪烁,他们被redirect回到我的应用程序callback我在哪里得到一个新的标志。 这是如此笨重,我不能相信这是正确的方法。

  1. 告诉cookie是否有效的唯一方法是使用它,并在错误过期时收集错误。 没有轮询方法或任何东西来检查令牌是否有效。

  2. 要获得新的令牌,只需重新将用户redirect到authentication页面。 因为他们已经授权您的应用程序,他们将立即被redirect回您的应用程序,您将有一个新的令牌。 他们不会被允许,因为他们已经这样做了。

总之,这没有任何窍门。 你已经正确地做了。

最近,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 

有关更多详细信息,请在此处查看: https : //developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal

 //you just need more step because the access token you are getting will expire in 1 hour //you can overcome this in step 5 1-Redirect to (or have user click link to) app's authorization URL 2-User authorizes and is redirected to your callback URL 3-Callback uses "code" parameter to get a access token 4-Access token is used with Graph API to pull or push information 5-exchange short-lived access token you just got with 60 day access token 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 6-after 60 day the user must login again to your app and the steps from 1-5 will be repeated. --the real problem you will face is how to make the user visit your app page again 

Facebook已经删除了“代表”模式刷新访问令牌的function。 最好和简单的方法是将用户redirect到Facebooklogin页面以重新启动应用程序。 在这里findfacbook文档

如果用户已经授权您的应用程序和访问令牌过期。 您可以重新将用户redirect到authentication页面。 但oauth对话框不会显示,因为用户已经授权您的应用程序。 他将redirect到您使用的redirect_url参数。

{“error”:{“message”:“Missing redirect_uri parameter。”,“type”:“OAuthException”,“code”:191,“fbtrace_id”:“BHvng7s53ra”}}