2012-08-14 14 views
4

我們允許用戶僅使用一個Facebook訪問令牌作爲憑證來訪問我們的後端(使用REST API通過https使用JSON回覆),所以我們要做好兩兩件事:Facebook:如何從用戶的訪問令牌獲取應用ID - 使用/ app?access_token = TOKEN?

  1. 驗證訪問令牌,並找到用戶的ID - 這只是一個電話https://graph.facebook.com/me?access_token=TOKEN

  2. 請確保此訪問令牌屬於我們的Facebook應用程序。 你可以打電話 https://graph.facebook.com/app?access_token=TOKEN,但這似乎是一個無證的功能(有時相當緩慢)。

有人可以告訴我這是否是一種標準方法,可能會留在那裏?還是有另一種做我們想做的事情的方法:驗證用戶的訪問令牌是否有效並來自我們的Facebook應用程序。

你可以打電話給我/權限和我?fields = installed,但這些都不能告訴我我們正在檢查哪個facebook應用。

+0

有一個[類似的問題](http://stackoverflow.com/questions/9236445/is-there-an-api-equivalent-of-the-facebook-access -token-linter-debugger)就這樣。我不認爲你真的需要驗證訪問令牌是否屬於你的特定應用程序。你只要在你的應用中使用它,如果它不屬於它,你會得到一個錯誤。 – borisdiakur 2012-08-14 09:59:10

+0

@樂高,謝謝。但事情是我沒有得到一個錯誤 - 我們的後端只是使用訪問令牌調用FB Graph API,只要它有效,我們就可以獲得/ me資源 - 它可以是來自其他Facebook應用程序的訪問令牌,對? – PapaFreud 2012-08-14 12:31:18

+0

我不明白爲什麼你應該關心訪問令牌是否屬於你的應用程序,只要你從令牌獲取用戶數據。也許我只是看不到整個畫面。 – borisdiakur 2012-08-14 13:06:29

回答

2

您可以通過每個請求傳遞signall_request insted of access_token。 參數signed_request基於您的應用程序的密鑰,您可以簡單地驗證它。閱讀documentation關於簽名的請求。

+1

如果您從JS SDK中使用'FB.login',則您得到的響應_does_包含'signed_request'屬性。張貼到你的服務器,驗證它在那裏......在這一點上可以想象到的最高級別的安全性達到了恕我直言。 – CBroe 2012-08-15 15:33:49

+0

是的。你是對的。 – user1587955 2012-08-16 07:07:11

+0

這聽起來對我來說是個好主意。我需要檢查移動應用程序開發人員是否也可以獲得signed_request,但我接受了這個答案。 – PapaFreud 2012-08-16 13:10:32

3

您應該按照docs(客戶端或服務器端)中所述實施身份驗證流程。基本上,您可以通過使用您的應用程序對用戶進行身份驗證來獲得全新的訪問令牌,並將該令牌用於請求到服務器。這樣您就可以確定該標記「屬於」您的應用程序。步驟:

  1. 用您的應用程序ID初始化您選擇的Facebook SDK。
  2. 檢查用戶是否已經授權您的應用程序。
  3. 如果用戶已經授權您的應用程序,您可以將他或她的Facebook用戶ID與令牌(「屬於」您的應用程序)一起使用,如果不是,則:驗證用戶並獲取令牌。

docs爲您提供的細節示例代碼和大量的:

更新:

你提到的功能是記錄here(向下滾動到2.發出請求API):

的應用程序訪問令牌使您可以請求作爲一個應用程序,而不是 用戶。要檢索您的應用程序的細節,上執行HTTP GET :
https://graph.facebook.com/app?access_token=APP_ACCESS_TOKEN

因此該功能可能留下來。

+1

正確...我們的問題是我們計劃在前端/移動應用程序中挖掘訪問令牌,並將其傳遞給後端,讓後端使用Facebook驗證訪問令牌。但有效的訪問令牌本身並不意味着對後端的調用來自可信方。 – PapaFreud 2012-08-15 09:57:09

+0

你如何定義一個值得信賴的方?如果您擁有有效的訪問令牌,則即使用戶未通過身份驗證或授權您的應用,您也擁有有效的用戶。 – borisdiakur 2012-08-15 10:54:37

+0

這就是我的觀點。如果您設置了「免費啤酒優惠券」Facebook應用程序,並祕密使用您的用戶的訪問令牌在我們的後端執行某些操作,那麼您就不是我稱之爲可信任的一方......但是我們自己的Web前端或移動應用程序或無論是「可信」的。這就是爲什麼我認爲檢查(在後端)使用哪個facebook應用程序來獲取訪問令牌是很簡單的。 – PapaFreud 2012-08-15 11:56:11

相關問題