android - tipo - programas para crear aplicaciones moviles
¿Cómo autentican las aplicaciones populares las solicitudes de los usuarios desde su aplicación móvil a su servidor? (6)
Supongamos que tengo una aplicación de Android que se conecta a una API .Net para recibir / configurar datos. La confusión que tengo es sobre cómo iniciar sesión / iniciar sesión en el usuario por primera vez y autenticarlo cada vez que hacen una solicitud a la API.
- Si solo uso la autenticación basada en nombre de usuario / contraseña, ¿no serán lo suficientemente seguros?
- ¿Y no puedo guardar ese nombre de usuario / contraseña en el dispositivo por razones de seguridad del curso?
- ¿Debo emitir un GUID para cada usuario en el registro, guardarlo en su dispositivo y recuperarlo cada vez que solicite una API?
Qué otros patrones están disponibles y cuáles son más eficientes y seguros, solo necesito un flujo de proceso para ello. ¿Puede alguien decirme qué método utilizan las famosas aplicaciones de Android como Facebook, FourSquare o Twitter para autenticar cada solicitud que llega desde su aplicación móvil a su servidor?
Lo siento de antemano si eso no es información pública.
Básicamente, estos famosos usan el protocolo OAuth (1) / framework (2). A pesar de que tiene que ser un estándar, cada uno de estos tenía implementaciones diferentes de este protocolo / marco. Entonces tenemos que ser muy cuidadosos cuando se trata de integración.
Ejemplo: Dropbox todavía usa OAuth 1 y recientemente se le ocurrió la compatibilidad con OAuth 2.
Volver a la respuesta, como, afirmó peterpan, es una forma de autenticación basada en tokens que se realiza una sola vez y que está fuera de la ecuación. Estos tokens están caducados o, en algunos casos, se otorga poder al desarrollador.
Lo interesante de esto es que se puede definir el alcance del acceso a los recursos en lugar de permitir que la aplicación cliente conserve los nombres de usuario, contraseñas que son peligrosas.
Esta es la ilustración básica de cómo funciona esto.
Voy a actualizar la respuesta después de obtener más detalles sobre esto, ya que estoy trabajando en esta área en estos días :)
El nombre de usuario y las contraseñas pueden ser seguros cuando se colocan en SharedPreferences. Usar https para conectarse a un servidor también debería ser lo suficientemente bueno.
Estaba buscando exactamente lo mismo y encontré google way, algo como dijo peterpan, pero a través de las API de Google. Prueba este enlace y sigue tu camino en Google, ¡también estoy empezando! ¡Publicaré nueva información mientras estoy en ello!
Soy novato pero intentaré dar la solución lógica para la pregunta dada.
Habrá dos opciones, [1] Por cada URI, la autenticación http se realizará donde las credenciales ingresadas del usuario serán verificadas y el usuario tendrá acceso a los recursos.
[2] Otro enfoque podría ser, un usuario deberá autenticarse y en cada autenticación se generará un token único. Usando el token generado, el usuario debe acceder a los recursos.
Aunque no estoy seguro de qué enfoque podría ser el más adecuado para la aplicación móvil.
El ejemplo de autenticación es un buen lugar para comenzar. Android almacena las credenciales en el Administrador de cuentas, puede ver las cuentas en la configuración de Android. Esto almacenará automáticamente tokens, pedirá al usuario las credenciales si caducaron o faltan, refrescar los tokens, etc. Me parece que la parte http de este ejemplo falta o es antigua. La ampliación de AccountAuthenticatorActivity de android es una gran ayuda para analizar los datos serializados en el diseño y volver a Internet.
Imagino que usan un sistema de seguridad basado en "token", por lo que la contraseña nunca se almacena en ningún lugar, solo se usa la primera vez para autenticarse. Por lo tanto, la aplicación inicialmente publica el nombre de usuario / contraseña (a través de ssl) y el servidor devuelve un token que almacena la aplicación. Para los intentos de sincronización posteriores, el token se envía primero, el servidor lo verifica y luego permite que se publiquen otros datos.
El token debe tener un vencimiento para que el servidor pueda volver a solicitar un intento de autenticación.
Si se conecta al adaptador de sincronización desde Android Framework, tendrá la capacidad de sincronizar y autenticar todo bajo el capó.
http://developer.android.com/training/sync-adapters/creating-sync-adapter.html
Si revisas las cuentas en Configuración en tu dispositivo, verás a qué me refiero.