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

Facebook调试令牌,不使用任何SDK,只是一个HTTP GET请求,facebook,facebook-graph-api,google-apps-script,facebook-oauth,Facebook,Facebook Graph Api,Google Apps Script,Facebook Oauth,我没有使用任何Facebook SDK,而是使用HTTP请求。 下面是我用来将用户登录到我的应用程序中的URL:(不是真实的ID或URL) 文件是 用户登录Facebook后,我的网站会加载附加到URL的访问令牌。我请求一个response\u type=token,所以我得到的是一个token,不是一个代码,或者是一个代码和一个token 根据Facebook文档,确认身份 因为此重定向流涉及将浏览器重定向到URL 在您的应用程序中,通过登录对话框,流量可以直接访问此应用程序 包含组成片段或参

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

文件是

用户登录Facebook后,我的网站会加载附加到URL的访问令牌。我请求一个
response\u type=token
,所以我得到的是一个token,不是一个代码,或者是一个代码和一个token

根据Facebook文档,
确认身份

因为此重定向流涉及将浏览器重定向到URL 在您的应用程序中,通过登录对话框,流量可以直接访问此应用程序 包含组成片段或参数的URL。如果你的应用程序假设了这些 如果参数有效,您的应用程序将使用生成的数据 潜在的恶意目的。因此,你的应用程序应该确认 使用该应用程序的人与您拥有的人相同 在为其生成访问令牌之前的响应数据。 身份确认的实现方式取决于具体情况 以上收到的回复类型:

因为我收到了一个
令牌
,Facebook文档中的这句话应该适用于我:

当收到令牌时,需要对其进行验证。你应该做个决定 对检查端点的API调用,该端点将指示令牌的使用者 是由哪个应用程序生成的。您可以通过客户端或 来自服务器,具体取决于您的用例

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

以下是Facebook文档中的引用:

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

因此,我已经解析了URL末尾的访问令牌,然后从服务器发出另一个GET请求,如示例中为检查配置的,但我无法使其工作。我尝试过使用生成的应用令牌,我尝试过使用我的应用ID和我的应用机密,但没有任何效果。我收到一条错误消息:

Execution failed: Invalid argument:
如果我使用

并粘贴登录时返回的令牌,效果良好。我得到信息。所以我要取回的代币是有效的

我使用精确的语法检查访问令牌,并且我已经多次检查每个字符的拼写或语法错误。一定有其他原因导致请求被拒绝。出于测试目的,我从不同的URL发送HTTP GET请求,但由于令牌是可移植的,Facebook允许从不同的地方(例如服务器)发出请求

为什么我的请求失败了

我想知道是否是应用程序脚本UrlFetch服务导致了错误。我取回的代币是有效的。在联机调试器中,令牌是正常的。我一直收到一个
无效参数
错误
GET
请求没有有效负载,因此尝试使用
payload
,因此尝试使用该参数对我没有帮助

我禁用了HTTPExceptions,并得到了回复:

{"error":{"message":"Unsupported get request.","type":"GraphMethodException","code":100}}
在facebook
接收错误代码表中,没有代码100

我设置了
“转义”:false,我想可能有一个不应该转义的字符正在转义,但它什么也没做

也许URL中有一些
获取
不喜欢的东西。也许我需要手动逃离一些东西

好吧,我想起来了。谷歌应用脚本
UrlFetchApp.fetch(getapptknur,optnAppTkn)不喜欢“|”字符。如果我使用该字符,我会得到一个
执行失败:无效参数:
错误,它与HTTP请求无关


因此,使用App ID和App Secret作为access_令牌,除以“|”字符将产生错误。并且,应用访问令牌还使用该字符来划分应用ID和应用令牌。因此,也许我可以找出该“|”字符的转义字符。

我发现了问题。Facebook在应用程序ID后面配置了一个分隔符

AppID | AppToken


“|”字符是分隔符。该字符的转义码为
%7C
。在我的例子中,|字符需要在URL中转义。一旦我这样做了,我就开始从Facebooks服务器收到回复。

我能否成功验证返回的令牌是否有效可能最终无关紧要,因为在我的
高级应用程序设置中,我可以限制从我的应用程序重定向到我的URL。换句话说,“坏人”不能将他们的URL与我的应用程序结合使用。“以我的应用程序的名称”进行的任何授权将只重定向到“我的高级应用程序设置”中特别列出的URL。因此,我们试图避免“坏人”利用登录到我的应用程序的有效Facebook用户进行攻击,然后将该用户重定向到恶意应用程序。无效的令牌无论如何都不会起作用另一件事是,调试令牌不会告诉我是否有一个坏人拥有另一个用户的有效令牌。它是?调试信息返回登录时使用的应用程序和用户ID。我想可能有人会尝试在我的URL末尾附加一个无效的令牌,但这会是什么结果?坏令牌不能发布任何内容。
Execution failed: Invalid argument:
{"error":{"message":"Unsupported get request.","type":"GraphMethodException","code":100}}