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