2015-05-15 3 views
2

Я использую Dropbox PHP SDK. Все работало нормально, и внезапно процесс аутентификации больше не работает, пока в код этой области не были внесены изменения.API Dropbox больше не работает, несоответствие CSRF

Я получаю сообщение об ошибке «CSRF Mismatch».

При взгляде на все маркеры CSRF в URL все кажется правильным:

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

Я говорил с поддержкой API Dropbox. Они были очень полезны, и предложил ряд вещей:

Эта ошибка указывает, что значение состояния возвращается в переадресацией URI не соответствует маркер CSRF, который был сохранен в сессии. Значение состояния в вашем URL-адресе перенаправления выборки соответствует значению состояния, указанному , на URL-адрес авторизации, поэтому, похоже, проблема связана с значением , сохраненным в сеансе. Несколько вещей, которые приходят на ум, что может привести к это:

  • Вы звоните WebAuth.start несколько раз для одного приложения потока авторизации? Если это так, возможно, вы сохраняете токен CSRF для одного, но просматриваете URL-адрес/authorize с другим.
  • Не работает ли ваше хранилище сеансов правильно? Dropbox PHP SDK использует csrfTokenStore, передаваемый конструктору WebAuth. Если не может сохранить новый токен CSRF или возвращает устаревшие значения , которые могут вызвать это несоответствие.
  • Вы переключаетесь между различными экземплярами приложения и тем самым получаете доступ к разным сеансам?

Оказалось, что это первая теоретизированная проблема. В фоновом режиме произошел звонок AJAX, в котором была проверена логина, которая также перенаправлена ​​на страницу авторизации, создав таким образом несколько запросов. Как только я отключил эту проблему, проблема исчезла.

Смежные вопросы