【问题标题】:Authenticated Referrals & Server-Side Auth Flow - What is the redirect_uri?经过身份验证的推荐和服务器端身份验证流程 - 什么是 redirect_uri?
【发布时间】:2012-04-02 11:11:36
【问题描述】:

从经过身份验证的推荐(例如从时间线故事)到我的网站,我正在尝试使用服务器端身份验证流程来获取被推荐用户的访问令牌。我需要将我的应用程序密码、身份验证代码和原始重定向 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?

【问题讨论】:

    标签: facebook oauth-2.0 facebook-oauth


    【解决方案1】:

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

    【讨论】:

    • 见下文,代码后面有参数需要剥离。
    【解决方案2】:

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

    从 code= 中删除所有内容不会产生访问令牌,也不会仔细删除 code=....;部分。

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

    【讨论】:

      【解决方案3】:

      除了卡尔所说的, 我缩小了问题的范围,因为特定的 ref 参数。

      如果您启用了推荐 oauth,我将无法将代码交换为具有特定 ref 的 access_token

      例子:

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

      这很烦人,因为我们无法让移动网络应用程序处理这个问题

      【讨论】:

      • 您找到解决方案了吗?我得到了类似的结果。您是否在 Facebook 上提交了错误?
      【解决方案4】:

      正如卡尔指出的,代码后面还有额外的参数。与 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/

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 嗨皮埃尔,你曾经解决过这个问题吗?如果是这样,解决方案是什么?
        猜你喜欢
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 2021-05-26
        • 1970-01-01
        • 2019-09-25
        • 2010-11-24
        相关资源
        最近更新 更多