簡體   English   中英

Facebook Graph API拒絕新創建的訪問令牌

[英]Facebook Graph API rejects newly created access token

今天早些時候,我們的Web應用程序的Facebook登錄流程已停止為某些用戶工作。 當我們嘗試獲取當前配置文件時,會返回錯誤。 它聲稱我們剛剛通過將用戶重定向到OAuth登錄流程而生成的訪問令牌已被拒絕。

給出的理由是:

訪問令牌無效,因為用戶未在超過90天內使用該應用

對我來說,這沒有任何意義,因為我們不會將訪問令牌存儲在除當前會話之外的任何位置,並且每次用戶使用Facebook登錄時都會重新創建它。

來自Spring Social的GET /me調用的棧跟蹤如下所示:

ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
        at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)

問題可能與Facebook API的變化有關,但我不知道這會如何影響我們在每次登錄時創建的短期訪問令牌。

當我們的集成測試與測試用戶一起登錄時,我遇到了這個問題 - 以下JSON從Graph API返回:

{
    "error": {
        "message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
        "type": "OAuthException",
        "code": 190,
        "error_subcode": 493,
        "fbtrace_id": "F/1z2AsTRx8"
    },
    "timestamp_microsecond": "2018-05-30 11:22:01.353949"
}

這是一個更大的問題,因為我們的測試用戶不會與應用程序“互動”。 為了解決這個問題,我不得不:

  • 登錄FB開發者站點
  • 找到有問題的應用
  • 在Roles - > Test Users下查找找到合適的用戶
  • 單擊該用戶的“編輯”按鈕,然后單擊“以此測試用戶身份登錄”
  • 登錄后,請轉到“設置” - >“應用和網站”
  • 在“已過期”標簽中找到用戶未與之互動的應用超過90天的應用
  • 點擊已過期應用上的“查看和修改”按鈕
  • 單擊彈出窗口中的“續訂訪問”

一旦我完成了所有這些步驟,我的測試用戶(和集成測試)再次工作。

Facebook回復:

感謝您的聯系。 這實際上是我們已經在另一個錯誤報告中跟蹤的已知問題。

我要將您的報告與現有報告合並,因此我們可以在一個地方處理該問題。 請參閱此主題以獲取更新: http//developers.facebook.com/bugs/194772814474841/

我的時間解決方案是使用JS SDK,它在我的情況下正常工作...

更新

這個問題似乎剛剛由Facebook修復。


Facebook 提交了一個錯誤 ,他們目前(5/3/18)致力於解決問題。

這里和bug評論中提出了幾種解決方法。 總結一下:

  1. 添加您之前未要求強制重新授權的新權限
  2. 捕獲錯誤並通過auth_type=reauthorize手動重新授權用戶
  3. 切換到JS SDK並使用客戶端登錄

我正在尋找解決方案#2,因為它似乎是最直接的方式。

我在FB文檔中找到了這個鏈接: 刷新用戶訪問令牌

其中提到用戶必須在90天后重新建立令牌,因此如果出現此類錯誤,我們應該重定向用戶再次注冊。

他們甚至提到他們在本文檔的頂部刪除了非活躍用戶的標記。 也許他們犯了一個錯誤並刪除了所有用戶令牌。 FB公告 無論如何,解決方案是重定向用戶重新訂閱。

根據討論,這個bug仍然存在

根據用戶對上述討論的評論,我們撤銷了我們應用的每個用戶的權限,並且它有效。 為此我們使用了下一個圖api 端點 我們必須堅持用戶的facebookID。

問候

臨時解決方案對於iOS,您需要更改SDK代碼以支持“重新授權”。 要更改源代碼,您需要使用CocoaPods下載它。 然后通過pod復制以下功能: https//github.com/mavris/FacebookFix

在您的應用中添加權限代碼

喜歡

Android:fbLoginButton.setReadPermissions(Arrays.asList(EMAIL));

IOS:loginButton.readPermissions = @ [@“public_profile”,@“email”];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM