Cross Platform Aplicación: Android + Custom REST Backend (Yii2) + Proveedor SSO de terceros para iniciar sesión (Google+)

Estoy interesado en iniciar una aplicación web de plataforma cruzada (web + móvil) que se supone que tiene su propia base de usuarios leales (como cualquier buena aplicación).

El backend es alimentado por el framework Yii2 (PHP) y expone varios puntos finales REST que requieren autenticación por parte del usuario (token de acceso oAuth2). El usuario puede obtener un token de acceso llamando a un punto final de API de "inicio de sesión" dedicado, que es la parte fácil y no está relacionada con esta pregunta.

La versión web de mi aplicación también permite a los usuarios iniciar sesión a través de un SSO externo (por ejemplo, Google+) que hace que el usuario también se cree automáticamente en la base de datos de usuarios internos (más conectado al ID de Google externo. Mismo usuario "interno" para iniciar sesión automáticamente).

Esto funciona bien para el par de web + REST API, sin embargo, cuando traemos Android a la imagen las cosas empiezan a complicarse.

La aplicación de Android puede proporcionar al usuario la opción de iniciar sesión a través de su perfil de Google+ a través del SDK estándar de Android y podemos recuperar su identidad de Google de esta manera. Sin embargo, el problema es cómo intercambiar con seguridad la identidad de Google que tiene la aplicación de Android para un token de acceso emitido por la API REST, sin pedir al usuario su nombre de usuario y contraseña en nuestra base de datos interna (la contraseña se genera automáticamente durante el primer SSO Login, por lo que el usuario final nunca sabe su contraseña, sólo utiliza SSO para iniciar sesión en la plataforma web y móvil). La palabra clave aquí es "segura" porque si confiamos en que la aplicación de Android autenticó correctamente al usuario y de alguna forma "lista blanca" la comunicación entre la aplicación de Android y los puntos finales de REST (por ejemplo, a través de un "token de acceso de servicio" ), Un hacker potencial puede hacer ingeniería inversa o olfatear la comunicación entre los dos y puede llamar a los puntos extremos REST directamente, identificándose usando el mismo token de acceso de confianza. En efecto, obtener un token de acceso para cualquier usuario aleatorio.

    Tal vez utilizar AccountManager? https://developer.android.com/reference/android/accounts/AccountManager.html https://developer.android.com/training/id-auth/custom_auth.html

    Usted puede crear cuenta propia y luego utilizar el administrador de cuentas andorid nativo con la seguridad nativa?

    En mi aplicación yo uso esto como eso: en Yii2 RestService uso HttpBearerAuth, y en la aplicación Andorid Crear cuenta personalizada con el inicio de sesión y la contraseña, a continuación, utilice esta cuenta para crear http solicitud. Todas las credenciales son administradas por Android.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.