2014-03-12 49 views
5

我有一個iOS應用程序,我登錄到Facebook要求access_token。Facebook圖形API和應用程序的祕密

然後,我通過這個訪問令牌到我的服務器,我想要得到的「/我」的信息,用我的appsecret_proof,但我注意到,我能做到這一點沒有appsecret_proof

 
curl "https://graph.facebook.com/me?access_token=THE_ACCESS_TOKEN" 

{"id":"658267751","name":"Ricardo Otero", 
"first_name":"Ricardo","last_name":"Otero", 
"link":"https:\/\/www.facebook.com\/oterosantos", 
"hometown":{"id":"107911285910314","name":"Coimbra, Portugal"}, 
"location":{"id":"110432202311659","name":"Lisbon, Portugal"}... 

雖然我已經設置了選項「應用程式密鑰認證適用於服務器API調用」爲真:

facebook settings

所以,應該不是reques ts需要應用程序的祕密?我不明白!

+0

根據我的經驗,Graph API只需要'access_token'。 – Jhn

+0

@Jhn:但我希望它只在出於安全原因而給出應用程序祕密時才能工作。如果有人從客戶那裏獲得access_token,該怎麼辦? –

+0

嗨,@RicardoOtero,我有同樣的問題,你解決了這個問題嗎? –

回答

1

每個access_token都依賴於應用程序和用戶,所以對於不同的應用程序和用戶組合,您將擁有不同的訪問令牌,因此您不必擔心。儘管我不確定你爲什麼要這樣做 http://m-farhan.com/2014/03/ios-facebook-sdk-tutorial/ 是這樣做的正確方法。

+0

因爲我想將令牌發送給服務器(所以我可以從那裏訪問Facebook獲取信息),如果令牌被竊聽,則可以發出惡意請求! –

+1

令牌是好的60天然後它過期,如果你真的需要它在你的服務器上使用SSL連接和圖形api總是ssl所以沒有必要擔心,如果你真的想,你可以添加鍵哈希。一旦你有令牌,你就可以獲得令牌有權限的所有用戶數據,即使在有權限的情況下也可以在牆上張貼 –

+0

SSL連接並不能幫助你解決攻擊者可以反編譯你的應用程序的問題,提取'appsecret_proof'和然後代表其他用戶進行Facebook調用。 –

0

我也通過Facebook的API「appsecret_proof」參數導航 - 這裏有在Facebook開發者網站上的官方文檔: https://developers.facebook.com/docs/graph-api/securing-requests#appsecret_proof - 它看起來像這個例子PHP調用可以幫助你:

$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret); 

下面是他們顯示示例命令行電話:

curl \ 
    -F 'access_token=<access_token>' \ 
    -F 'appsecret_proof=<app secret proof>' \ 
    -F 'batch=[{"method":"GET", "relative_url":"me"},{"method":"GET", "relative_url":"me/friends?limit=50"}]' \ 
    https://graph.facebook.com 

這裏的人誰做,雖然用的Node.js服務器(這麼想的外觀類似的電話有speciifc FACEBOOK/API/SDK referecne ...:

Get signed_request in Node.js (Express) Facebook canvas app

+0

按照上述答案: –

相關問題