我没有使用任何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令牌。所以也许我可以弄清楚转义字符是什么用的" | "字符。
答案 0 :(得分:6)
我发现了问题。 Facebook在应用ID之后使用分隔符配置App Token
。
的AppID | APPTOKEN
" | "字符是分隔符。该角色的转义码为%7C
。在我的情况下,|需要在URL中转义的字符。我一做到这一点,就开始从Facebook服务器上收到回复。