1

而不是使用任何Facebook SDK,我正在使用HTTP請求。 這裏是我使用的用戶登錄到我的應用程序的網址:(不是真正的ID或URL)Facebook調試令牌不使用任何SDK,只是一個HTTP GET請求

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 在您的應用登錄對話框,交通可以直接與虛構的碎片或參數訪問此 網址。如果您的應用程序假定這些 是有效的參數,則您的應用程序將使用該組成數據進行潛在的惡意目的。因此,您的應用應該確認 使用該應用的用戶與爲其生成訪問令牌之前的應答數據是同一個人。 確認身份以不同的方式取決於 RESPONSE_TYPE完成上述接受:

而且因爲我接受了一個token從Facebook文檔這句話應該適用於我:

當接收的令牌,它需要驗證。您應該向檢查端點發出一個 API調用,該檢查端點將指示由哪個應用生成令牌 的人員。您可以從客戶端執行此操作,也可以從服務器執行此操作,具體取決於您的使用案例。

對於這種特殊的情況下,有一個標題爲一節,檢查訪問令牌

下面是從Facebook的文檔報價:

無論您的應用程序使用的代碼或令牌作爲您的response_type從 登錄對話框,此時它將收到訪問令牌。 但是,出於與上述相同的安全原因,您應該執行 自動檢查以確認該令牌屬於您的應用期望它屬於的人,並且它是您的應用程序生成的令牌。 我們提供了可用於檢查訪問令牌下面的圖形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腳本UrlFetch服務的信息。我回來的令牌是有效的。在線調試器中,令牌很好。我不斷收到invalid argument錯誤。 GET請求沒有有效負載,所以試圖使用​​,所以試圖使用該參數不會幫助我。

我靜音HTTPExceptions,並得到了響應回:

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

在Facebook的Receiving Error Codes表,沒有代碼100

我設置"escaping" : false想,也許有可能是一個字符,不該逃脫,逃脫,但沒有做任何事。

也許網址中有些東西是fetch不喜歡的。也許我需要手動轉義一些東西。

好的,我已經想通了。 Google Apps Script UrlFetchApp.fetch(getAppTknURL, optnAppTkn);不喜歡「|」字符。如果我使用該字符,則會出現Execution failed: Invalid argument:錯誤,這與HTTP請求無關。

因此,使用App ID和App Secret作爲access_token,除以「|」字符將產生錯誤。而且,App Access令牌也使用該字符來劃分應用程序ID和應用程序令牌。所以也許我可以弄清楚那個「|」字符的轉義字符是什麼。

+0

我是否可以成功驗證返回的令牌是否有效可能最終並不重要,因爲在我的「高級應用程序設置」中,我可以限制從我的應用程序到我的URL的重定向。換句話說,「壞傢伙」不能將他們的URL與我的應用程序結合使用。任何在我的應用程序名稱中完成的授權只會重定向到我的高級應用程序設置中專門列出的URL。所以我們試圖避免「壞人」利用有效的Facebook用戶登錄我的應用程序,然後將用戶重定向到惡意應用程序的情況。無效的令牌不會工作 –

+0

另一件事是,調試令牌不會告訴我,如果其中一個壞人擁有另一個用戶有效的令牌,。 。 。是嗎?調試信息返回登錄時使用的應用程序和用戶ID。我認爲有人可能會嘗試在我的網址末尾添加無效的令牌,但是該怎麼辦?壞的標記不能發佈任何內容。 –

回答

4

我發現了這個問題。 Facebook在應用程序ID後使用分隔符配置App Token

的AppID | APPTOKEN

的 「|」 字符分隔。該字符的轉義碼爲%7C。在我的情況下,|角色需要在URL中轉義。一旦我做到了,我就開始從Facebook服務器獲得迴應。