2015-05-15 83 views
2

我使用Dropbox PHP SDK。一切工作正常,並且突然間,身份驗證過程不再有效,而此區域中的代碼未做任何更改。Dropbox API不再工作,CSRF不匹配

我收到錯誤「CSRF不匹配」。

當尋找在URL所有CSRF令牌都似乎是正確的:

https://www.dropbox.com/1/oauth2/authorize?locale=&client_id=redacted&response_type=code&redirect_uri=https%3A%2F%2Fmyapp.herokuapp.com%2Fdropbox%2Fcallback.php&state=L9yH1hf7pgiOY7j7fsFegA%3D%3D

https://myapp.herokuapp.com/dropbox/callback.php?state=L9yH1hf7pgiOY7j7fsFegA%3D%3D&code=redacted

CSRF令牌匹配。日誌顯示他們並不是:

[15-May-2015 12:09:44 UTC] /dropbox-auth-finish: CSRF mismatch: Expected 'sW2Zy4OD7YBijNHaeCtyjQ==', got 'L9yH1hf7pgiOY7j7fsFegA==' 
+0

如果您將標記更改爲'sW2Zy4OD7YBijNHaeCtyjQ =='它是否有效? –

+0

不,因爲當我從錯誤中複製預期的代碼時,下次我使用該代碼時,它沒有有效性,並被另一個代碼取代。 – edwardmp

+0

同一問題:http://stackoverflow.com/questions/29845655/dropbox-showing-error-when-asking-for-access-token – edwardmp

回答

0

我說過Dropbox API支持。他們是非常有益的,並建議了一些事情:

此錯誤指示狀態值返回到您的重定向 URI不匹配存儲在會話中的CSRF令牌。雖然示例重定向URI的 狀態值與給定爲 的狀態值與/ authorize URL相匹配,但看起來問題是存儲在會話中的值爲 。有幾件事情浮現在腦海中可能 導致此:

  • 你打電話WebAuth.start多次爲一個單一的應用程序的授權流程?如果是這樣的話,那麼可以將CSRF令牌 作爲一個存儲,但是正在瀏覽另一個的/ authorize URL。
  • 會話存儲無法正常工作嗎? Dropbox PHP SDK使用您傳遞給WebAuth構造函數的csrfTokenStore。如果該 無法存儲新的CSRF令牌,或者正在返回可能導致此不匹配的陳舊值 。
  • 您是否在應用程序的不同實例之間切換,因此訪問不同的會話?

原來是第一個理論化問題。一個AJAX調用發生在後臺,它有一個登錄檢查,也被重定向到授權頁面,從而創建了多個請求。一旦我禁用了這個問題,問題就沒有了。