Кросс-платформенное приложение: Android + Custom REST Backend (Yii2) + сторонний поставщик единого входа для входа в систему (Google+)

Я заинтересован в запуске кросс-платформенного веб-приложения (web + mobile), которое должно иметь свою собственную лояльную пользовательскую базу (как любое хорошее приложение).

Бэкэнд работает на базе Yii2 (PHP) и предоставляет несколько конечных точек REST, требующих аутентификации пользователя (токен доступа oAuth2). Пользователь может получить токен доступа, вызвав выделенную конечную точку API для входа в систему, которая является легкой частью и не связана с этим вопросом.

Моя веб-версия приложения также позволяет пользователям входить в систему через внешний SSO (например, Google+), что заставляет пользователя автоматически создаваться во внутренней пользовательской базе данных также (плюс подключается к внешнему идентификатору Google, поэтому последующие запросы единого входа одного и того же пользователя вызывают Один и тот же «внутренний» пользователь должен автоматически войти в систему).

Это отлично подходит для пары API + REST API, однако, когда мы выводим Android на картинку, все начинает усложняться.

Приложение Android может предоставить пользователю возможность входа в свой профиль Google+ через стандартный Android SDK, и мы можем получить его идентификатор Google таким образом. Тем не менее, проблема заключается в том, как безопасно обменивать то, что имеет идентификатор Google для Android, для токена доступа, выданного REST API, без запроса пользователя о его имени пользователя и пароле в нашей внутренней базе данных (пароль автогенерируется во время первого SSO Логин, поэтому конечный пользователь никогда не знает своего пароля, он использует только SSO для входа на веб-и мобильную платформу). Ключевое слово здесь «безопасно», потому что, если мы просто доверяем, что приложение Android правильно аутентифицировало пользователя и каким-то образом «переименовало» связь между Android-приложением и конечными точками REST (например, через «токен доступа к сервису», который знает только Android-приложение ), Потенциальный хакер может перепроектировать или обнюхать связь между ними и может напрямую обращаться к конечным точкам REST, идентифицируя себя с использованием того же доверенного токена доступа. Фактически, получение токена доступа для любого случайного пользователя.

Может быть, использовать AccountManager? https://developer.android.com/reference/android/accounts/AccountManager.html https://developer.android.com/training/id-auth/custom_auth.html

Вы можете создать собственную учетную запись, а затем использовать собственный менеджер учетных записей andorid с собственной секретностью?

В моем приложении я использую это так: в Yii2 RestService используйте HttpBearerAuth, а в Andorid App Create Custom Account с логином и паролем. Затем используйте эту учетную запись для создания HTTP-запроса. Все учетные данные управляются Android.

Intereting Posts
Android – Как проверить Profard obfuscation? JSON Parsing with Retrofit Android Null Pointer Exception Не уверен, как это исправить Как мы можем выполнить функцию javascript и получить возвращаемое значение в нашем приложении для Android? Является ли добавление и удаление прослушивателей событий более эффективным по сравнению с отсутствием их вообще? Как обернуть DrawerLayout вокруг PreferenceActivity в приложении для Android? Открытая ссылка google play store в мобильной версии Android Инструмент командной строки Android Debug Bridge (adb) существует в $ PATH, но «команда не найдена» в Linux Какой SDK для платформы Android мне нужен? Каков способ вставки огромных данных JSON в SQLite DB в андроид Как получить данные из DialogFragment в фрагмент? Как запустить режим массовой проверки с использованием библиотеки Zxing в моем приложении для сканирования нескольких штрих-кодов и qr-кодов без отображения экрана предварительного просмотра Asmack XMPP регистрация новых пользователей Как получить местоположение с Wi-Fi в Android? Отображение MediaRouteButton для Chromecast в панели действий