2012-03-16 81 views
3

从经过身份验证的引用(例如从时间线故事)到我的网站,我试图使用服务器端身份验证流程来获取引用用户的访问令牌。我需要将我的应用秘密,认证码和原始重定向URI传递给Facebook访问令牌端点。由于我没有发起认证请求,我如何确定原始redirect_uri?经过身份验证的推荐和服务器端身份验证流程 - 什么是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?

回答

2

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

+0

请看下面的代码后面有参数需要去掉。 – 2012-11-08 16:06:44

+0

今天不工作 – Ers 2013-04-06 16:19:28

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

删除一切从代码=不产生一个访问令牌,也没有仔细仅删除代码=。 ...;部分。

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

0

除了卡尔所说的, 我缩小了问题是因为具体参考参数。

如果您启用了引用oauth,我将无法将access_token的代码与特定参考交换。

例子:

那些不会与转诊工作的OAuth不管你用什么redirect_uri用于生成access_token。有可能其他ref参数不起作用。

这很烦人,因为我们不能有移动网络应用程序这个问题

+0

您是否找到了解决方案?我得到了类似的结果。你在Facebook上发布了一个bug吗? – 2012-12-15 15:27:57

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/

0

我申请在Facebook上的一个错误的位置:https://developers.facebook.com/bugs/141862359298314

如果这仍然会影响您的应用程序,请订阅。

+0

嗨,皮埃尔,你是否有能力解决这个问题?如果是这样,那么解决方案是什么? – 2014-12-03 14:01:27