Facebook调试令牌而不使用任何SDK,只是一个HTTP GET请求

时间:2014-04-05 21:41:51

标签: facebook facebook-graph-api google-apps-script facebook-oauth

我没有使用任何Facebook SDK,而是使用HTTP请求。 以下是我用来将用户登录到我的应用程序的URL :(非真实ID或URL)

https://www.facebook.com/dialog/oauth?
  client_id=6545941f68498461
  &redirect_uri=https://script.google.com/macros/s/hcz-IRoJhm/exec?
  &response_type=token
  &scope=publish_stream

文档为HERE. Official Facebook Login

用户使用Facebook登录后,我的网站加载了一个附加到URL的访问令牌。我请求response_type=token,因此我获得了令牌,而不是代码或代码和令牌。

根据Facebook文档,Confirming Identity

  

因为此重定向流涉及将浏览器重定向到URL   在“登录”对话框的应用程序中,流量可以直接访问它   带有伪造片段或参数的URL。如果你的应用假设这些   是有效参数,您的应用程序将使用补充数据   潜在的恶意目的。因此,您的应用应该确认   使用该应用程序的人与您拥有的人员相同   在为它们生成访问令牌之前的响应数据。   确认身份是以不同的方式完成的,具体取决于   上面收到的response_type:

因为我收到token来自Facebook文档的这句话应该适用于我:

  

收到令牌时,需要进行验证。你应该做一个   API调用检查端点,指示谁是令牌   是为哪个应用程序生成的。您可以从客户端执行此操作   从服务器,取决于您的用例。

对于这种特殊情况,有一个标题为检查访问令牌的部分:

以下是Facebook文档的引用:

  

您的应用是否使用代码或令牌作为您的response_type   登录对话框,此时它将收到一个访问令牌。   但是,出于与上述相同的安全原因,您应该执行   自动检查以确认令牌属于您的人   应用程序期待它属于,并且它是您的应用程序   生成令牌。   我们提供了以下可用于检查访问令牌的Graph API端点:

GET graph.facebook.com/debug_token?
     input_token={token-to-inspect}
     &access_token={app-token-or-admin-token}

所以,我已经从URL的末尾解析了访问令牌,然后根据检查示例中的配置从服务器发出了另一个GET请求,我无法使其工作。我已尝试使用生成的应用令牌,我尝试使用我的应用程序ID加我的应用程序密钥,但没有任何作用。我收到一条错误消息:

Execution failed: Invalid argument:

如果我使用Facebook Debugger

并粘贴从登录返回的令牌,它工作正常。我得到了回信息。所以我回来的令牌是有效的。

我使用确切的语法来检查访问令牌,并且我已经多次检查每个字符的拼写或语法错误。必须有其他原因导致请求被拒绝。出于测试目的,我从不同的URL发送HTTP GET请求,但由于令牌为portable,因此Facebook允许来自不同位置的请求,例如来自服务器的请求。

为什么我的请求失败?

我想知道是否有一些导致错误的Apps Script UrlFetch服务。我回来的令牌是有效的。在线调试器中,令牌很好。我一直收到invalid argument错误。 GET请求没有有效负载,因此尝试使用payload,因此尝试使用该参数对我没有帮助。

我将HTTPExceptions静音,然后得到回复:

{"error":{"message":"Unsupported get request.","type":"GraphMethodException","code":100}}

在Facebook Receiving Error Codes表中,没有代码100。

我设置"escaping" : false认为可能有一个不应该被转义的角色被转义但是没有做任何事情。

也许网址中有fetch不喜欢的内容。也许我需要手动逃避一些事情。

好的,我已经找到了一些东西。 Google Apps脚本UrlFetchApp.fetch(getAppTknURL, optnAppTkn);不喜欢" | "字符。如果我使用该字符,则会收到Execution failed: Invalid argument:错误,该错误与HTTP请求无关。

因此,使用App ID和App Secret作为access_token,除以" | "字符会产生错误。并且,App Access令牌也使用该角色来划分应用ID和App令牌。所以也许我可以弄清楚转义字符是什么用的" | "字符。

1 个答案:

答案 0 :(得分:6)

我发现了问题。 Facebook在应用ID之后使用分隔符配置App Token

  

的AppID | APPTOKEN

" | "字符是分隔符。该角色的转义码为%7C。在我的情况下,|需要在URL中转义的字符。我一做到这一点,就开始从Facebook服务器上收到回复。