Как авторизовать мобильные приложения с помощью третьей стороны, но подключайтесь к моему сервису, а не к третьей стороне - PullRequest
17 голосов
/ 03 ноября 2011

Мое приложение спроектировано следующим образом: у меня есть веб-сервис (работающий на GAE, не очень соответствующий этому вопросу), и данные, которые содержит этот сервис, доступны через веб-сайт, а также через мобильные и настольные приложения.

В настоящее время пользователь проходит аутентификацию на веб-сайте через Google ClientLogin, а приложения проходят аутентификацию / авторизацию через встроенного oauth-провайдера GAE. (OAuth используется здесь в основном для аутентификации, мое приложение фактически не использует никаких внешних данных через OAuth, кроме уникального идентификатора пользователя и адреса электронной почты.)

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

Давайте возьмем Facebook в качестве примера. Когда мобильное приложение проходит через поток oauth Facebook и получает токен доступа, этого недостаточно, потому что это моя служба, а не приложение, которое на самом деле должно общаться с Facebook, чтобы получить контактную информацию и уникальный идентификатор пользователя. Это заставляет меня думать, что процесс OAuth должен происходить в контексте моей службы, а не мобильного приложения. Мой сервис становится потребителем, а Facebook - провайдером oauth, и сервис удерживает маркер доступа oauth, это происходит, когда пользователь впервые настраивает свою учетную запись.

Если это правильный подход, где это оставляет аутентификацию для приложений? Что происходит, когда пользователь уже имеет учетную запись и устанавливает свежий экземпляр мобильного приложения? Я также представляю, как проходил процесс oauth, сопоставляя учетные данные с данными, уже сохраненными моим сервисом, и затем выдавал свой собственный «токен доступа» к приложению из сервиса, чтобы авторизовать этот экземпляр приложения. Это кажется запутанным и хакерским.

Я уверен, что я не могу быть единственным человеком, который фактически «заимствует» систему учетных записей у третьего лица для мобильного приложения с бэкэндом, но я действительно не понимаю, как правильно это сделать. это.

Что я не вижу и / или не понимаю концептуально?

1 Ответ

10 голосов
/ 12 декабря 2011

Несколько моих коллег и я когда-то делали проект, очень похожий по природе, еще в университете. Мы аутентифицировали наших пользователей через Facebook или Foursquare, используя соответствующие им OAuth API.

Родная версия приложения для Android открыла WebView со стартовой страницей поставщика OAuth, которая после аутентификации перенаправлялась обратно в наш сервис. Затем наш сервис запросил токен OAuth у поставщика OAuth (у Foursquare есть несколько довольно простых инструкций ). Когда мы получили этот токен, мы настроили сеанс с использованием файлов cookie, к которым мы могли получить доступ из приложения.

Чтобы проверить сеансы, мы только что проверили, действовал ли токен доступа у провайдера. Мы также использовали уникальные идентификаторы пользователей соответствующих провайдеров, чтобы различать пользователей.

Так что да, у нас сработало следующее: заставьте приложение аутентифицировать и авторизовать службу , а не само приложение.

...