2010-04-29 55 views
4

我正在iFrame中開發一個新的Facebook Canvas應用程序並試圖授權用戶。新的OAuth API建議我做一個重定向到以下來授權我的應用中的用戶:Facebook Canvas iFrame App - 使用新的OAuth協議授權用戶

https://graph.facebook.com/oauth/authorize? CLIENT_ID = ... & REDIRECT_URI = http://www.example.com/oauth_redirect

然而這產生其中請求來自用戶權限的全Facebook頁面在自身的iFrame中呈現的奇怪的問題(在Facebook即臉譜)。有誰知道如何解決這個新的OAuth API,因爲我不想開始使用舊的REST API方法。

+0

提示:在IE中,iFrames無法接受第三方Cookie的額外安全性(在這種情況下,這將是Facebook的授權Cookie,將被iFrame拒絕......這意味着IE瀏覽器將無法提供服務你的iFrame應用程序....)。爲了解決這個問題,你必須添加一個P3P頭到你的HTTP響應中。 – Amir 2010-07-09 00:23:19

回答

0

即使我有同樣的問題,我張貼在Facebook論壇。主持人告訴我,這是目前尚無解決方案的問題。看看這個線程 - http://forum.developers.facebook.com/viewtopic.php?id=56590

+0

那麼你的解決方案是什麼? – zerkms 2010-05-03 21:29:44

+0

由於Facebook爲Canvas頁面實施了oAuth,此答案可能不再有效。 – Amir 2010-10-09 06:54:56

0

相反,我已經找到了解決這個問題,我在我的博客文章here概述。一探究竟。

+0

我不認爲你的解決方案使用新的oauth認證或facebook圖表api。 – Abhi 2010-05-04 09:38:38

+0

你的鏈接迴應404錯誤 – 2010-12-16 05:31:45

0

還有一種方法可以用oAuth v2來完成它,這在facebook文檔中有描述,但是分成幾頁,因此不易理解。

首先,您需要在應用的「高級參數」中激活「Canvas 2.0 OAuth 2.0」標誌。

然後,這裏是一個PHP例子解釋如何處理:

function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
      error_log('Unknown algorithm. Expected HMAC-SHA256'); 
      return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
      error_log('Bad Signed JSON signature!'); 
      return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

$data = parse_signed_request($_REQUEST["signed_request"], <your facebook app api secret>); 

if (empty($data["user_id"]) && !isset($_REQUEST['redir'])) { 
    // The user isn't authenticated 
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" . 
      <your facebook app id> . "&redirect_uri=" . 
      urlencode('http://apps.facebook.com/<yourapp>/?redir=1'); 
    echo("<script> top.location.href='" . $auth_url . "'</script>"); 
    die; 
} 
// Here the user is authenticated 
echo ("Welcome User: " . $data["user_id"]); 
// And now you have the Graph API auth token in $data["oauth_token"], 
// so you can use any graph api method 
0

您不能在畫布iframe中做簡單的302或301重定向,因爲這隻會重定向iframe中的內容。 Facebook推薦的是發送一小段JavaScript,將top.location設置爲對話框/ oauth頁面。

<script>top.location='https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&scope=publish_actions';</script>. 

clientid成爲您的AppId和redirect_uri是它處理從身份驗證對話框頁面重定向的頁面。