2012-10-12 119 views
7

Necesito acceder a una API que requiere autenticación http por usuario mediante una aplicación móvil jquery.almacenar de forma segura la contraseña de usuario localmente en una aplicación móvil de jquery

Planeo hacer que la aplicación esté disponible como sitio web, así como también empacarla en Cordova para varios dispositivos.

Si tengo un formulario de inicio de sesión que captura el nombre de usuario y la contraseña y lo almacena como una variable de JavaScript, ¿hay alguna forma de que se expongan estos datos?

En caso afirmativo, ¿cuál es la mejor alternativa para manejar el almacenamiento de los datos de autenticación de los usuarios? Soy reticente a construir un servidor intermediario si no es necesario.

Muchas gracias. : D

+0

¿Utiliza HTTP auth auth, o es un nombre de usuario/contraseña pasado como parámetros en cada llamada API? – SilverlightFox

+0

en realidad, ambos. http basic auth en cada llamada al servidor - no se devuelve ningún token de autenticación. – significance

+0

Una vez que el usuario se ha autenticado con la autenticación básica, ¿el navegador no enviará automáticamente estos datos a cada recurso solicitado?Sé que así es como funciona para otras solicitudes de navegador, aunque no estoy muy seguro con JavaScript. – SilverlightFox

Respuesta

3

Sugiero que no se almacene el nombre de usuario o la contraseña en el localStorage, sino que se almacene un token de acceso. Los tokens de acceso se pueden actualizar y cambiar con frecuencia, pero tampoco revelan quién es el usuario ni cuál es su contraseña hash.

Además iOS llavero o si está de codificación para un dispositivo que no sea iPhone para mayor seguridad se puede:

  • Cambiar el token de acceso en cada entrada y cada vez que la aplicación se utiliza
  • tienda el ID de dispositivo en la base de datos del servidor (ver http://docs.phonegap.com/en/2.2.0/cordova_device_device.md.html#device.uuid)
  • Borrar el almacenamiento local y solicitar un nuevo inicio de sesión si el token de acceso o dispositivo de identificación no coincide con los datos almacenados en la base de datos

Asegúrese de no almacenar la ID del dispositivo en localStorage.

Para mayor seguridad también puede almacenar la dirección IP del usuario en la base de datos y verificar (lado del servidor) si la dirección IP coincide, pero esto podría ser demasiado porque el usuario tendría que iniciar sesión cada vez que se conectan a Internet en una nueva ubicación o si su dirección IP cambia.

Almacenar la dirección IP en la base de datos del servidor y luego verificar si coincide (en el lado del servidor) probablemente sea la más segura ya que no importaría si alguien obtiene los datos locales de almacenamiento.

2

¿Entiendo que no controlas el backend en el que inicias sesión? Si lo hace, me inclinaría más a enviar un nombre de usuario/contraseña una vez, y luego almacenar un token de acceso que le permitirá el acceso posterior.

Si no controla el servidor, tiene que almacenar el nombre de usuario/contraseña. Diría que configurarlos en localStorage es lo más seguro posible (lo cual es cierto, no es muy seguro.) De nuevo, si su inicio de sesión no ocurre en HTTPS, estaría más preocupado por las contraseñas que hay desde allí que desde el dispositivo. sí mismo). Puede hacer que las contraseñas sean más difíciles de encontrar, no invocar las variables "nombre de usuario/contraseña", cifrarlas en javascript, ofuscar su código. Pero al final, siempre se pueden recuperar sin demasiado esfuerzo con el acceso correcto al dispositivo.

Después de empaquetar como aplicación nativa, tiene más opciones, p. Llavero iOS: http://shazronatadobe.wordpress.com/2010/11/06/ios-keychain-plugin-for-phonegap/

Cuestiones relacionadas