Как разрешать мобильные приложения с третьим лицом по Oauth, но подключитесь к моему сервису, а не к третьей стороне
Мое приложение архивировано следующим образом: у меня есть веб-сервис (работает на GAE, не очень соответствующий этому вопросу), а данные, которые эта служба содержит, доступны через веб-сайт и через мобильные и настольные приложения.
В настоящее время пользователь аутентифицируется на веб-сайте через Google ClientLogin, и приложения аутентифицируются/получаются с помощью встроенного поставщика услуг GAE. (OAuth используется здесь в основном для аутентификации, мое приложение фактически не использует внешние данные через OAuth, кроме уникального идентификатора пользователя и адреса электронной почты.)
То, что я хотел бы сделать, - это расширить количество сервисов, которые пользователи могут использовать для входа. Из-за усложняющего фактора приложений кажется, что мне нужен OAuth. Но я не могу правильно концептуализировать, как этот поток должен идти.
Давайте рассмотрим Facebook в качестве примера. Когда мобильное приложение проходит через поток oauth Facebook и получает токен доступа, этого недостаточно - потому что его служба, а не приложение, на самом деле должна разговаривать с facebook для получения контактной информации и уникального идентификатора пользователя. Это заставляет меня думать, что процесс OAuth должен происходить в контексте моего сервиса, а не в мобильном приложении. Затем мое обслуживание становится потребителем, а Facebook - провидером oauth, и служба держится за токен доступа oauth, это происходит, когда пользователь устанавливает свою учетную запись в первый раз.
Если это правильный подход, где это означает, что проверка подлинности для приложений? Что происходит, когда пользователь уже имеет учетную запись и устанавливает новый экземпляр мобильного приложения? Я предполагаю, что вы также проходите процесс oauth, сопоставляя учетные данные с данными, уже сохраненными моей службой, а затем выдаете мой собственный токен доступа в приложение из службы, чтобы разрешить этот экземпляр приложения. Это кажется запутанным и хакерским.
Я уверен, что я не могу быть единственным человеком, который фактически "заимствует" систему учетных записей третьей стороны для мобильного приложения с бэкэнд, но я действительно не понимаю, какой правильный способ сделать это.
Что я не вижу и/или не понимаю концептуально неправильно?
Ответы
Ответ 1
Несколько коллег и я когда-то делали проект, совершенно похожий по своей природе, еще в университете. Мы аутентифицировали наших пользователей через Facebook или Foursquare, используя их соответствующие API OAuth.
Нативная версия Android-приложения открыла WebView
с начальной страницей поставщика OAuth, которая после аутентификации перенаправлена обратно на наш сервис. Затем наша служба сделала запрос на токен OAuth от поставщика OAuth (у Foursquare есть некоторые довольно простые инструкции). Когда мы получили этот токен, мы настроили сеанс с использованием файлов cookie, доступ к которым можно получить из приложения.
Чтобы проверить сеансы, мы только что проверили, был ли токен доступа все еще действительным с провайдером. Мы также использовали уникальные идентификаторы пользователей соответствующих поставщиков, чтобы отличать пользователей.
Итак, да, что сработало для нас: Сделайте аутентификацию и авторизацию приложения, а не самого приложения.