Facebook Canvas iFrame App - 使用新的OAuth协议授权用户

时间:2010-04-29 16:47:59

标签: facebook facebook-graph-api oauth authorization

我正在iFrame中开发一个新的Facebook Canvas应用程序并尝试授权用户。新的OAuth api建议我重定向到以下内容以在我的应用中授权用户:

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

然而,这会产生一个奇怪的问题,即在iFrame本身(即Facebook内的Facebook)中呈现请求来自用户的权限的完整Facebook页面。有没有人知道如何使用新的OAuth API解决这个问题,因为我不想开始使用旧的REST API方法。

6 个答案:

答案 0 :(得分:0)

即使我有同样的问题,我也在facebook论坛发布了。主持人告诉我,这是一个目前尚无解决方案的问题。看一下这个帖子 - http://forum.developers.facebook.com/viewtopic.php?id=56590

答案 1 :(得分:0)

相反,我已经在我的博文here中找到了解决这个问题的方法。看看吧。

答案 2 :(得分:0)

过去两天一直在努力解决这个问题,并在Facebook developers forum上找到了解决这个问题的方法。

答案 3 :(得分:0)

还有另外一种方法可以使用oAuth v2来实现它,这在facebook文档中有描述,但是分成几页,所以不容易理解。

首先,您需要在应用的“高级参数”中激活“OAuth 2.0 for Canvas”标记。

然后,这是一个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

答案 4 :(得分:0)

试试这篇文章http://novacoders.blogspot.com/2011/04/facebook-apps-oauth-20-authorization.html

如果您不使用任何Web服务器,则需要使用Javascript SDK。 FB.init()返回所有必要的数据,如access_token。

答案 5 :(得分:0)

您无法在画布iframe中执行简单的重定向302或301,因为这只会重定向iframe中的内容。 Facebook推荐的是发送一小段JavaScript,将top.location设置为dialog / oauth页面。

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

clientid是您的AppId,redirect_uri是处理来自身份验证对话框页面的重定向的页面。