经过认证的推荐人员服务器端身份验证流程 - redirect_uri是什么?

时间:2012-03-16 22:19:28

标签: facebook oauth-2.0 facebook-oauth

从经过身份验证的推荐(例如从时间线故事)到我的网站,我正在尝试使用服务器端身份验证流程来获取被推荐用户的访问令牌。我需要将我的app secret,auth代码和原始重定向URI传递给Facebook访问令牌端点。由于我没有启动身份验证请求,如何确定原始redirect_uri?

Facebook时间线的链接如下:

http://www.facebook.com/connect/uiserver.php?app_id=153644678059870&method=permissions.request&redirect_uri=http%3A%2F%2Fwww.wnmlive.com%2Fpost%2F141833948%3Ffb_action_ids%3D10100708033267487%26fb_action_types%3Dwnm-live%253Acomment%26fb_source%3Drecent_activity&response_type=code&display=page&auth_referral=1

所以我认为我需要传递的重定向URI是:

http%3A%2F%2Fwww.wnmlive.com%2Fpost%2F141833948%3Ffb_action_ids%3D10100708033267487%26fb_action_types%3Dwnm-live%253Acomment%26fb_source%3Drecent_activity

用户最终重定向到的URI是:

http://www.wnmlive.com/post/141833948?fb_action_ids=10100708032119787&fb_action_types=wnm-live%3Apost&fb_source=recent_activity&code=AQALK-Mwb_Nwi4z7FWnFaL6tEXvNtVJiRKrgarG9X73sp22TJyk8v2GWKtuXuevJk4hPSRNnuNpEgZXLFdOS_k-pY-mE15DYytIa8Y7VdSw3VL-XYi-CR9BCqRQGq4uBJvSSdZayCp6MWzDMaNqWd5r8OhKVnOhg_yDlvfoLl21N2SMwkJaOfD5mlPnPb5A-Q4A#_=_

是否可以安全地假设我可以删除以“& code =”开头的所有内容并将其用作重定向URI?

5 个答案:

答案 0 :(得分:2)

根据Facebook工程师的说法,redirect_uri是直到“& code =”的当前URI。代码将始终是最终的查询字符串名称/值对。我也证实了这一点。

答案 1 :(得分:0)

目前(2012年8月23日)Facebook正在代码=之后添加参数,例如, http://apps.coincident.tv/newgirltalk/mobile/?ref=bookmarks;code=AQCZmt8n9NyfKNj8Ea9yzeCYCh-m6FcrbFqqnpQRYpfTwsO8DCk5E6CIbYig1I7g5RxDZxNs7pLcQZDdfjdLJy-8IE4BAW56VPNVADTIa9zxsFEVGLTCjfP7tuSNAIeNZdWecI53pQipnt4YpnawoRXDYVVylFZnWoVYdMtVCaOjZ5DUrN9VSByNVkV5ojOoCEY;fb_source=bookmark_favorites;count=0;fb_bmpos=4_0

从code =删除所有内容不会产生访问令牌,也不会小心删除代码= ....;部分。

可以通过添加指向您应用的Facebook书签,在移动设备浏览器中打开www.facebook.com,然后通过书签转到您的应用来重新创建。

答案 2 :(得分:0)

除了卡尔所说的, 由于特定的ref参数,我把问题缩小了。

如果您启用了推介oauth,我将无法使用特定参考号替换access_token的代码。

示例:

无论您使用哪redirect_uri生成access_token,这些都不适用于引荐oauth。可能还有其他参数不起作用。

这非常烦人,因为我们无法让移动网络应用处理此问题

答案 3 :(得分:0)

正如卡尔指出的,代码后还有其他参数。与Carl不同,如果我将它们剥离并使用生成的url作为重定向uri,它就可以工作。

$redirecturi = $_SERVER['SCRIPT_URI'];
$delimiter = "?";
foreach ($_GET as $key=>$val) {
    if ($key == "code") break;
    $redirecturi .= $delimiter.$key."=".rawurlencode($val);
    $delimiter = "&";
}
// now I can use $redirecturi to exchange the code for a token

http://developsocialapps.com/authenticated-referrals-facebook-apps/

答案 4 :(得分:0)

我在Facebook上提交了一个错误:https://developers.facebook.com/bugs/141862359298314

如果这仍然影响您的应用,请转到订阅。