2012-01-21 24 views
9

Estoy interesado en la mejor manera de hacer autenticación de usuario en una aplicación móvil. Por el momento, la configuración es bastante simple. Estoy almacenando el nombre de usuario y la contraseña en la aplicación y enviándola a la API cada vez que necesito ejecutar una consulta restringida.Cómo poner autenticación de usuario en una aplicación móvil

Creo que esta es la forma incorrecta de hacerlo.

¿Sería una mejor manera de enviar el nombre de usuario y la contraseña cuando el usuario inicie sesión y guarde la identificación de ese usuario? El problema con esto es que la API acepta una identificación de usuario y no un nombre de usuario y contraseña. Una identificación de usuario será mucho más fácil de "adivinar" y las personas malintencionadas podrían enviar una solicitud a la API con acciones de ejecución de ID de usuario seleccionadas al azar en su cuenta. Tengo una clave de API. ¿Esto es lo suficientemente seguro?

El problema es que quiero comenzar a integrar Twitter y Facebook oauth en la aplicación. No he leído mucho al respecto, pero creo que obtienes un "token". ¿Cómo funcionaría esto con la configuración que estás sugiriendo? ¿Sería beneficioso crear un token en mi propia base de datos de usuarios y usar el token (ya sea el mío, el de Facebook o el de Twitter) como autorización? ¿O tendría sentido mantener separado cada servicio y tratar con ellos por separado?

Gracias.

Respuesta

8

La forma correcta sería generar token de autenticación en el servidor cuando el usuario inicia sesión y enviar este token en la respuesta de inicio de sesión. Entonces este token se usa en solicitudes posteriores.

Esto significa que el servidor debe realizar un seguimiento de los tokens de autenticación que genera. También puede rastrear los tiempos de creación de tokens y hacer que los tokens caduquen después de un tiempo.

El token debe ser una secuencia aleatoria suficientemente larga, de modo que no pueda adivinarse fácilmente. Cómo hacer esto fue contestado antes: How to generate a random alpha-numeric string?

Personalmente prefiero el enfoque de UUID.

Actualización:

Este problema ya se resolvió en los navegadores web, a través de cookies y sesiones. Puede volver a utilizar este mecanismo en sus peticiones Android (aunque algunos puristas REST refutan este enfoque):

  1. activar las sesiones en el servidor.

  2. Al usuario se registra en un servidor añaden algunos datos de la sesión, por el tiempo instancia de entrada:

    request.getSession().setAttribute("timeOfLogin", System.currentTimeMillis()); 
    
  3. Desde sesiones están habilitadas, también es necesario para habilitar el soporte para cookies en sus peticiones HttpClient: Using Cookies across Activities when using HttpClient

  4. Cada vez que se realiza una solicitud, el servidor debe verificar si la sesión contiene el atributo timeOfLogin. De lo contrario, debería devolver la respuesta HTTP 401.

  5. Cuando el usuario cierra la sesión, llame a la url de cierre de sesión del servidor y borre las cookies en el cliente.

+0

Ok, así que generar un token es el camino a seguir. ¡Malvado! :) Gracias –

Cuestiones relacionadas