我試圖實現通過JavaScript和PHP SDK保護的Facebook登錄
- 的Javascript檢查,如果用戶登錄或沒有,如果有的話,發送一個代碼(無論是或的access_token signedRequest)至PHP安全地處理登錄。
- PHP將從JavaScript代碼和使用app_secret,將確保從JavaScript給出的代碼是有效的。
- 使用PHP SDK我想用appsecret_proof將我所有的Graph API調用都打開,這樣我就可以打開FB App中的「所有調用需要證明」。
當我得
1)我公司目前擁有的JavaScript在頁面加載時,並假設這個特定的用戶登錄,在這種情況下驗證該初始化,然後我有機會獲得$helper = new FacebookJavaScriptLoginHelper();
類,我可以在那裏獲得會話並使用PHP進行調用,我也可以直接使用訪問令牌$session = new FacebookSession('access token here');
- 太棒了!
2)我有這段代碼將檢查JS響應的signedRequest屬性,檢查app_secret - 太好了!
$signed_request = $_POST['signedRequest'];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = "mysecret"; // Use your app secret here
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
return null;
}
//this is the oAuth code.
echo $data['code'];
哪裏我不清楚
我很困惑,在我想要達到3點)。
我想利用與appsecret_proof
使用FB PHP SDK類的偉大工程,它不會發送appsecret_proof以下代碼段
安全的服務器端調用。 (如果從2檢查結果)是空的,我可以只燒掉劇本那裏,所以這很好。)
$helper = new FacebookJavaScriptLoginHelper(); $session = $helper->getSession(); $request = new FacebookRequest($session, 'GET', '/me'); $response = $request->execute(); $graphObject = $response->getGraphObject();
我可以捲曲,將有appsecret_proof但是這是不可能的使用PHP SDK(通過那裏更乾淨)。
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
也許吧?
一旦我完成2)我應該
getLongLivedSession()
在JS SDK短命的access_token然後validate()
使用Facebook\FacebookSession
命名空間。驗證和我在2)所做的一樣嗎?如果我這樣做,我還可以打開FB App中的'所有呼叫的需求證明'嗎?注意:如果您對我的問題投了反對票,請解釋爲什麼,我仍然不明白爲什麼我的最後一個問題被低估了,因此我無法改進。
無論如何,使用appsecret_proof應該是PHP SDK v4的默認值(除非您明確禁用它)。您是否真的嘗試過在應用程序儀表板中啓用遷移,並且失敗? – CBroe 2015-04-02 01:34:53
Ah OK是的,該選項稍微改變爲「需要應用程序的祕密」,當勾選爲是時,它仍然有效。它必須使用FacebookSession :: setDefaultApplication(Appid,AppSecret)中的應用程序祕密。在步驟2)中是否還有使用檢查的情況?儘管這似乎仍然沒有使用appsecret_proof(它是app_secret和訪問令牌的散列)。我是否已經過時了,還是我在當前的設置中安全? – 2015-04-02 09:13:42