Аутентификация пользователя, входящего в систему с FB на моем сервере, с помощью диспетчера учетных записей Android

У меня вопрос об аутентификации с помощью Диспетчера учетных записей Android. У нас есть бэкэнд и приложение для Android, и пользователь должен войти в наш бэкэнд, используя свою учетную запись Facebook. В настоящее время мы показываем веб-просмотр для этой цели, который делает обычный oAuth 2, но использование Android Account Manager более безопасно и намного проще для пользователя, поэтому мы хотим переключиться. Мой вопрос в том, как сервер может проверить, действительно ли пользователь, кем он себя притворяется. Поскольку мы не можем доверять App, мы должны поговорить с fb с серверной стороны, чтобы проверить, действительно ли пользователь является тем, кем он себя притворяется. Основываясь на довольно подобной идее, я сделал следующую диаграмму, чтобы спросить вас, правильно ли это это сделать или если я что-то пропустил:

Steps before the user is authenticated at "My Server" Поток будет выглядеть так:

  • Пользователь хочет войти в свою учетную запись в facebook
  • Диспетчер учетных записей Android отображается там, где он выбирает учетную запись facebook
  • Пользователь предоставляет доступ к тому, что "Мое приложение" имеет доступ к своим данным fb.
  • Диспетчер учетных записей Android получает токен аутентификации с сервера Facebook.
  • "Мое приложение" теперь имеет токен аутентификации и может получить доступ к данным fb пользователя.
  • "Мое приложение" передает токен на "Мой сервер"
  • Теперь "Мой сервер" проверяет, действует ли токен, получая пользовательские данные с сервера fb
  • Если токен был действительным, "Мой сервер" возвращает обычный временный действительный файл cookie для текущего сеанса с "Мое приложение". Пользователь теперь вошел в систему на My Server со своей учетной записью fb.

Так верно ли это? Является ли шаг 6 хорошей идеей передать токен один раз на "мой сервер" или есть лучший способ? Btw Facebook - это просто пример, мы используем разные провайдеры auth, такие как FB, Google и Twitter, но поток должен быть одинаковым для каждого из них.

Ответ 1

Я не знаю, правильно это или нет. Но я хотел бы поделиться тем, как мы решили эту проблему в нашем случае, которая была почти такой же, как и ваше решение. Мы использовали поставщиков Google и Facebook.

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