Как разрешить мобильным приложениям входить через Facebook и Google для доступа к веб-сервису в GAE?

Это связано с моим другим вопросом о необходимости создания приложения для Facebook.

Я много читал о том, как лучше всего подходить к входу в систему для пользователей мобильных приложений (iOS и Android), которые получают доступ к моему веб-сервису, работающему на Google App Engine. Я до сих пор не знаю, как лучше всего это сделать, так как я хотел бы предложить войти как с Google, так и с Facebook. Приложение и веб-служба не имеют ничего общего с Facebook или Google, за исключением того, что я хотел бы добавить их логин.

Очень просто войти в систему с помощью Google для GAE, то же самое можно сказать и об использовании OpenIDConnect. К сожалению, Facebook не поддерживает это.

Читая старый вопрос здесь на SO, где кто-то хотел сделать то же самое, что и я, похоже, что приложение должно выполнить вход в Facebook, а затем получить токен, который он передает моему бэкэнду, который необходимо проверить, связавшись с Facebook. Это как сделать это сегодня?

Я также нашел Google Identity Toolkit, который, кажется, то, что мне нужно. Однако у меня нет сайта или просто приложений. Мне нужно, чтобы приложения выполняли вход в Facebook и каким-то образом обеспечивали мою веб-службу, чтобы она могла проверять информацию для входа.

Позже пользователь приложения сможет войти в систему, используя произвольный Facebook, Google и мой пользовательский логин / пароль. Приложение и веб-служба должны знать, что пользователь вошел в систему, и разрешить ему доступ к API REST.

Как мне это сделать? Кстати, я использую Go на GAE.

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

Большое спасибо за любую помощь с этим!

ОБНОВИТЬ

ОК, всем большое спасибо за помощь и советы. Я успешно запустил пример приложения быстрого запуска для iOS для своего бэкэнда GAE. В основном, я создал приложение Facebook и учетные данные разрешений в моем веб-сервисе на GAE, чтобы образец приложения iOS мог войти в систему.

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

Основные открытые вопросы на данный момент:

  1. как получить gtoken в приложении iOS после успешного входа в Facebook или Google?
  2. я должен явно вызывать API в моем веб-сервисе для передачи gtoken или это как-то автоматически с включенным Gitkit API?

Спасибо за любую помощь!

ОБНОВИТЬ

Чтобы ответить на вопросы № 1 и № 2, есть "успешный URL-адрес входа", который можно указать в конфигурации ядра приложения, чтобы приложение знало, куда обращаться с помощью gtoken. Затем после этого это как объяснено в ответах.

2 ответа

Решение

Похоже, у вас есть приложение и бэкэнд на GAE. Если вы используете набор инструментов Google для идентификации, это позволит вам войти в систему с помощью Facebook, Google и электронной почты / пароля.

Когда пользователь успешно войдет в ваше приложение с помощью инструментария идентификации, ваш сервер должен получить gtoken. У вас есть два варианта здесь:

  1. Передайте gtoken в ваше приложение и сохраните его там. Когда ваше приложение выполняет API-вызовы к вашему бэкэнду, оно должно прикреплять gtoken к каждому запросу. Ваш бэкэнд должен проверять gtoken ( https://developers.google.com/identity/toolkit/web/required-endpoints) для каждого API, для которого требуется авторизация.
  2. Проверьте gtoken, сгенерируйте токен, который ваш сервер сможет распознать / идентифицировать. Затем передайте токен своему приложению, и все остальное будет таким же, как вариант 1.

Если вы не хотите использовать идентификационный инструментарий, вы можете ввести логин Facebook в своем приложении / бэкенде и использовать токен facebook для связи между вашим приложением и бэкэндом.

Каким бы ни было ваше решение, приложения, использующие ваш API, должны передавать вам то, что ваш сервер может распознать / авторизовать.

Ответ об использовании Google Identity Toolkit (GIT). GIT сам по себе является поставщиком удостоверений, который будет интегрирован с вашими приложениями и бэкэндом. Поток работает по следующим направлениям:

  • ваше приложение запрашивает вход через GIT API
  • GIT выполнит федеративную регистрацию через Facebook или другого стороннего провайдера (прозрачно для вашего приложения) и вернет в приложение маркерGIT (представляющий уникального пользователя с точки зрения вашей сквозной системы, т.е. приложения плюс бэкэнд)
  • приложение отправляет запрос к бэкэнду, в котором оно передает токен GIT
  • бэкэнд проверяет достоверность токена GIT (например, с помощью этого API-интерфейса go GIT) и может извлечь личность пользователя и, таким образом, проверить запрос

Вы можете найти более подробную информацию о проверке токена бэкенда в документации по конечной точке бэкэнда, в частности, поищите эти разделы:

  • Понимание файла cookie / токена Identity Toolkit
  • Получение информации для пользователей

Теперь фактическая проверка токена на бэкэнде может занять несколько секунд, поэтому может быть нецелесообразно делать это для каждого запроса REST из приложения. Если так, то вам нужно как-то:

  • сохраните информацию о том, что пользователь этого конкретного экземпляра приложения аутентифицирован в чем-то вроде "сеанса", управляемого между вашим приложением и бэкэндом
  • сопоставить конкретный запрос REST, полученный бэкэндом, с конкретным таким аутентифицированным "сеансом"

Но я не уверен, как именно эта "сессионная" функциональность выполняется в контексте приложения + бэкэнд, я еще не писал никаких приложений.

Другие вопросы по тегам