API-интерфейс Facebook API отклоняет вновь созданный токен доступа

Ранее сегодня поток пользователей Facebook нашего веб-приложения переставал работать для некоторых пользователей. Когда мы пытаемся получить текущий профиль, возвращается ошибка. Он утверждает, что токен доступа, который мы только что создали, перенаправляя пользователя в поток входа OAuth, отклонен.

Приведенная причина:

Токен доступа недействителен, так как пользователь не включил приложение более чем за 90 дней.

Для меня это не имеет смысла, поскольку мы не храним токен доступа в любом месте, кроме текущего сеанса, и воссоздаем его каждый раз, когда пользователь входит в систему с Facebook.

Элемент stacktrace из 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, но я не вижу, как это влияет на краткосрочные токены доступа, которые мы создаем на каждый вход.

Ответ 1

Обновление

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


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

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

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

Я собираюсь решить # 2, поскольку это, кажется, самый прямой способ.

Ответ 2

отзывы в facebook:

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Привет

Ответ 5

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

Ответ 6

Добавить код доступа в приложении

Любит

Android: fbLoginButton.setReadPermissions(Arrays.asList(электронная почта));

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