2011-01-07 33 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」}}