2011-01-07 51 views
50

据我所知,这是使用的OAuth2 API简而言之新的Facebook iframe的画布应用程序的基本过程:刷新Facebook OAuth2访问令牌到期后的正确方法是什么?

  1. 重定向到(或者用户点击链接)应用程序的授权网址
  2. 用户授权并且被重定向到您的回调URL
  3. 回调使用“代码”参数来获得访问令牌
  4. 访问令牌使用图形API来拉动或推动信息

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

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

回答

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

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

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

+3

我怀疑这是答案,但我觉得这是重要的发布这个问题,并得到一些回应。有许多关于访问令牌过期和iframe问题的重复帖子,但没有人询问Facebook文档的这个具体问题。我会在一两天后给你点最好的答案,让人们参加,谢谢。 – mtjhax 2011-01-08 17:25:34

+0

但是如果您的应用或游戏需要重复Facebook API调用,例如使用Javascript或Flash,会发生什么情况?你不能指望用户在游戏的潜在关键时刻每隔一小时就被迫重新加载你的应用程序? – Toxikman 2011-10-06 21:27:53

+2

我知道这有点旧,所以现在可能甚至不重要,但您可以使用Facebook状态URL(来自Facebook API以获取会话状态) – qodeninja 2011-10-30 23:53:27

23

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

+4

,但似乎它只对有短命令的新应用有帮助。对于使用长寿命令牌的现有应用程序,这没有帮助。 [你传递了一个拥有长期到期时间的access_token,端点将简单地将同一个access_token传回给你,而不会改变或延长到期时间。] – kitokid 2012-05-11 03:22:56

+0

是的,这有点痛苦。您最多只能在60天内获得令牌。 – logan 2012-05-11 22:31:41

+0

由于您是从应用程序硬编码(或传输)您的client_secret,因此存在一个主要的安全漏洞。 – PSIXO 2013-10-15 15:11:12

2

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

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

Facebook已经删除了以“代表”模式刷新访问令牌的功能。最好和简单的方法是将用户重定向到Facebook登录页面以重新应用该应用。 查找facbook doc here

-1

{ “错误”:{ “消息”: “缺少REDIRECT_URI参数。”, “类型”: “OAuthException”, “代码” 191 “fbtrace_id”: “BHvng7s53ra”}}

相关问题