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

时间:2011-01-07 03:06:00

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

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

  1. 重定向到(或让用户点击链接到)应用的授权网址
  2. 用户授权并重定向到您的回调网址
  3. Callback使用“code”参数获取访问令牌
  4. 访问令牌与Graph API一起用于提取或推送信息
  5. 问题是访问令牌过期相对较快并且需要“刷新”,所以我的问题是1)除了尝试使用它并简单地收到错误之外,你如何检测到令牌已经过期? 2)获得新令牌的最佳做法是什么?

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

6 个答案:

答案 0 :(得分:41)

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

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

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

答案 1 :(得分: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 

有关详情,请点击此处:https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal

答案 2 :(得分:4)

//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

答案 3 :(得分:4)

Facebook已删除了代表""更新访问令牌的功能。模式。最简单的方法是将用户重定向到Facebook登录页面以重新启动应用程序。 查找facbook doc here

答案 4 :(得分:2)

如果用户已经授权您的应用程序并且访问令牌已过期。您可以再次将用户重定向到身份验证页面。但是oauth对话框没有显示,因为用户已经授权您的应用程序。他将重定向到您使用的redirect_url参数。

答案 5 :(得分:-2)

{    "错误":{       "消息":"缺少redirect_uri参数。","输入":" OAuthException","代码":191 ," fbtrace_id":" BHvng7s53ra" }}