Facebook Graph API отклоняет вновь созданный токен доступа - PullRequest
0 голосов
/ 02 мая 2018

Ранее сегодня поток входа в 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)

Эта проблема, вероятно, связана с изменениями в API Facebook , но я не вижу, как это влияет на токены кратковременного доступа, которые мы создаем при каждом входе в систему.

Ответы [ 7 ]

0 голосов
/ 15 мая 2018

ВРЕМЕННОЕ РЕШЕНИЕ Для iOS вам нужно изменить код SDK для поддержки «повторной авторизации». Чтобы изменить исходный код, вам необходимо загрузить его с помощью CocoaPods. Затем скопируйте следующие функции над модулями: https://github.com/mavris/FacebookFix

0 голосов
/ 30 мая 2018

Я столкнулся с этой проблемой, когда наши интеграционные тесты вошли в систему с тестовым пользователем - из Graph API вернулся следующий JSON:

{
    "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
  • Найдите нужное приложение
  • Посмотрите под Ролями -> Тестирование пользователей, чтобы найти нужного пользователя
  • Нажмите кнопку «Изменить» для пользователя, а затем нажмите «Войти как этот тестовый пользователь»
  • Как только я войду в систему, зайдите в Настройки -> Приложения и веб-сайты
  • Найдите приложение на вкладке "Просрочено" для приложений, с которыми пользователь не взаимодействовал более 90 дней
  • Нажмите кнопку «Просмотр и редактирование» в просроченном приложении
  • Нажмите «Обновить доступ» во всплывающем окне

Как только я выполнил все эти шаги, мой тестовый пользователь (и интеграционные тесты) снова заработали.

0 голосов
/ 03 мая 2018

Ошибка сохраняется согласно обсуждению

В соответствии с комментарием пользователя к упомянутому обсуждению мы отозвали разрешения у каждого пользователя нашего приложения, и оно работало. Для этого мы использовали следующий график api endpoint . Мы должны были сохранить FacebookID пользователей.

Привет

0 голосов
/ 03 мая 2018

Обновление

Кажется, проблема только что была исправлена ​​Facebook.


Я сообщил об ошибке в Facebook, и они в настоящее время (5/3/18) работают над разрешением.

Здесь и в комментариях к ошибкам предлагается несколько обходных путей. Подведем итог:

  1. Добавить новое разрешение, которое вы ранее не запрашивали, для принудительной повторной авторизации
  2. Перехватить ошибку и повторно авторизовать пользователя вручную с помощью auth_type=reauthorize
  3. Переключиться на JS SDK и использовать клиентский вход в систему

Я иду к решению № 2, так как оно кажется наиболее простым.

0 голосов
/ 03 мая 2018

ответов Facebook:

Спасибо, что обратились. На самом деле это известная проблема, которую мы уже отслеживается в другом сообщении об ошибке.

Я собираюсь объединить ваш отчет с существующим, чтобы мы могли разобраться с вопросом в одном месте. Пожалуйста, обратитесь к этой теме для обновления: http://developers.facebook.com/bugs/194772814474841/

Мое временное решение состояло в том, чтобы использовать JS SDK, в моем случае он работает правильно ...

0 голосов
/ 02 мая 2018

Я нашел эту ссылку в FB docs: Обновление токенов доступа пользователя

Который упоминает, что через 90 дней пользователи должны восстановить свой токен, поэтому в случае такой ошибки мы просто должны перенаправить пользователя для повторной регистрации.

Они даже упоминают, что они удаляют токены неактивных пользователей в верхней части этого документа. Возможно, они допустили ошибку и удалили все токены пользователей. FB Announcement В любом случае, решение состоит в том, чтобы перенаправить пользователей на повторную подписку.

0 голосов
/ 02 мая 2018

Добавьте код разрешения в ваше приложение

Любит

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...