Как использовать собственный пользователь iOS, зарегистрированный в Facebook, для аутентификации в нашем пользовательском бэкэнде?

Цель — упростить процедуру входа/регистрации пользователя в нашем приложении для iOS. У нас есть собственный бэкэнд и собственный процесс входа и регистрации, и мы хотели добавить аутентификацию Facebook. История действительно такая же, как описано -мы">В ЭТОМ ПОСТЕ. Мы выпускаем собственные токены доступа, и нам нужно связать выпущенные Facebook токены доступа с пользователями нашей базы данных. Мы сделали именно так, как описано в этом посте.

  1. Мы использовали токен доступа Facebook, выпущенный на стороне клиента,
  2. передал на сервер,
  3. сервер подключался к API графа Facebook и получал от него необходимую информацию.
  4. в качестве сервера ответа отправьте объект JSON, содержащий информацию о профиле пользователя, которая отображается на стороне клиента.

Проблема, с которой я сталкиваюсь, заключается в том, что мы получаем токен доступа к Facebook. Первая версия, которую я сделал, использует FBSession, как описано ЗДЕСЬ, чтобы войти в систему и получить токен доступа. Он просто отображает окно входа в Facebook, пользователь вводит свои учетные данные, запрашивает необходимые разрешения, и FBSession становится активным, и я могу получить токен, как описано ЗДЕСЬ.

Начиная с iOS 6 пользователь имеет возможность войти в Facebook в одном месте, в настройках iOS и использовать этот сеанс во всех приложениях для публикации и получения информации из Facebook, единственное, что ему нужно сделать, это утвердить разрешения. которые запрашивает приложение, таким образом, нет необходимости входить в каждое приложение отдельно. С точки зрения UX это огромное улучшение, и я хотел использовать нативную сессию Facebook для iOS, предоставляемую Social Framework, чтобы получить токен доступа и передать его нашему бэкенду. Я думал, что это будет легко, и процедура описана ЗДЕСЬ, а вот цитата оттуда со строками для получения токена доступа

    // Get the access token, could be used in other scenarios
    ACAccountCredential *fbCredential = [self.fbAccount credential];            
    NSString *accessToken = [fbCredential oauthToken];

К сожалению, этот код не работает, [self.fbAccount credential]; возвращает nil. А вот цитата из документации Apple про ACAccount

полномочия

Учетные данные, используемые для аутентификации пользователя этой учетной записи.

@property(nonatomic, retain) ACAccountCredential *credential

Обсуждение — это свойство является обязательным и должно быть задано перед сохранением учетной записи. По соображениям конфиденциальности это свойство недоступно после сохранения учетной записи.

Таким образом, политика конфиденциальности Apple не разрешает доступ к сохраненному токену доступа другим лицам.

Теперь это тупик. Для аутентификации на нашем сервере с помощью Facebook мне нужен токен доступа к Facebook, а для улучшения UX (который требуется клиенту) мне нужно использовать собственный сеанс Facebook, доступный в меню настроек. Есть ли решение этой проблемы?


person kyurkchyan    schedule 23.07.2014    source источник
comment
Привет! Вам когда-нибудь удавалось сделать это по-хорошему?   -  person AlexanderN    schedule 27.03.2016