Цель:
Разрешить пользователю проходить аутентификацию через Facebook в приложении iOS, для которого требуется доступ к защищенной веб-службе, которую я использую.
Предположения:
Для тех пользователей, которые решили не использовать Facebook для входа в систему, существует собственная система аутентификации (и регистрации).
подробности:
- Предположим, мы хотим предложить пользователю возможность войти в систему через Facebook, не создавая отдельную учетную запись / учетные данные для нашей системы.
- Поскольку мы поддерживаем собственный механизм аутентификации (имя пользователя и пароль), у нас есть собственные идентификаторы пользователя и мы выдаем токен аутентификации, который используется для последующих взаимодействий после первоначальной проверки учетных данных.
Я удивлен, что Facebook не имеет лучших практик для этого в своей документации для разработчиков. Вся существующая документация предполагает, что вы создаете FB-аутентификацию на веб-сайте, или автономное мобильное приложение без службы, требующей аутентификации.
Вот мои первоначальные мысли о том, как это будет сконструировано, но я хочу проверить, правильно ли это.
- Клиент выскакивает на Facebook iOS Login
- Пользовательский интерфейс пользователя входит в систему с учетными данными Facebook и получает токен доступа
- Приложение iOS передает токен доступа на наш сервер
Наш сервер общается с API графа FB с помощью токена доступа, чтобы (а) проверить токен и (б) получить идентификатор пользователя FB для этого токена доступа.
например. Наш сервер будет вызывать https://graph.facebook.com/me/?access_token=XYZ, который будет возвращать информацию профиля в объекте JSON
При условии, что он действителен, наш сервер извлекает идентификатор пользователя из объекта JSON и проверяет, есть ли у пользователя уже учетная запись. Если это так, мы выдаем свой собственный билет авторизации клиенту для использования в этом сеансе. Если у пользователя нет учетной записи, мы создаем новую учетную запись с идентификатором пользователя Facebook, назначаем собственный уникальный идентификатор пользователя и выдаем наш билет авторизации.
- Клиент затем передает билет авторизации при последующих взаимодействиях, требующих аутентификации.
Мне кажется, это правильный подход, но я не уверен, что мне не хватает чего-то безумно простого и иду по неправильному (сложному) пути.