2012-10-03 85 views
11

Estoy construyendo una aplicación de iOS y el usuario se autentica con mi servicio web. No quiero que inicien sesión cada vez que se inicia la aplicación (el token dura un mes). Así que me gustaría guardar esto en el dispositivo en alguna parte.Almacenamiento de token de autenticación en iOS

¿Cuál es la mejor manera de hacerlo, de forma segura?

¿Puedo simplemente confiar en la aplicación que queda suspendida y mantener el token en "memoria"?

+0

Es posible que también desee consultar las pautas de OWASP - https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet – rajagp

Respuesta

15

2 opciones

  • hacer uso de NSUserdefault (tienda de acceso como entradas de fichas o TextField [Recordarme opción])
  • acceso Llavero (recomendado) para hacer el trabajo.

NSUserdefaults no es seguro para almacenar esos valores creíbles que es para fines de autenticación. Por otro lado, Keychain está hecho para hacerlo, de forma segura.

7

No puede confiar en que iOS mantendrá su aplicación para siempre en la memoria. Por lo tanto, debe guardar el token en un almacenamiento persistente en algún momento.

Mire Keychain Service for iOS. Este es el mejor lugar para almacenar cosas como contraseñas, tokens y otras claves.

+0

Pero, ¿y si las credenciales están en el DB remoto y no quiere almacenar esas credenciales? ¿en la zona? ¿La necesidad de utilizar Keychain de todos modos para guardar el token o algo así? –

+1

No. No tiene que guardar nada en Keychain. Depende de usted dónde desea almacenar cualquier secreto. Sin embargo, digamos que almacena credenciales en DB remoto. Ahora la pregunta es ¿cómo se autentica su aplicación a DB remota? Si almacena un nombre de usuario/contraseña codificados, cualquiera puede descompilar su aplicación, obtener un nombre de usuario/contraseña para la base de datos remota desde allí y usarla para obtener credenciales reales. Por lo tanto, al final tendrá que almacenar algo en su dispositivo y el servicio de llavero es una forma común y razonablemente segura de hacerlo. –

5

No puede hacerlo "de forma segura". Un token es de conocimiento público, y tan pronto como esté en su dispositivo, un hacker podría obtener acceso a él sin importar lo que intente hacer para protegerlo. Ponerlo en el llavero no cambiará este hecho. Incluso si lo almacena allí, lo que lo haría seguro mientras está allí, simplemente puede esperar hasta que caduque y luego enganchar el próximo cuando llegue por el cable la próxima vez. Sus tokens de acceso no son lo que necesita preocuparse por la seguridad, porque no puede, de hecho, hacer eso en un entorno móvil.

Lo que esto significa es que puede almacenarlo en cualquier lugar que desee. NSUserDefaults está bien, el llavero está bien, una base de datos está bien, un archivo de texto en el directorio de documentos está bien. Todos ellos son igualmente seguros porque un hacker determinado simplemente puede esperar la oportunidad correcta para acceder a los datos que desean. En su lugar, debe preocuparse por proteger las credenciales de autenticación de sus usuarios. Asegúrese de almacenarlos en el llavero, y solo comuníquese con su API a través de HTTPS a un servidor con un certificado SSL válido.

+6

A pesar de que estoy de acuerdo en que un dispositivo o conexión comprometida hará que la mayoría de las cosas no sean seguras, la seguridad funciona principalmente haciendo que sea muy difícil para un atacante obtener acceso a la información o romper algo. Con esto en mente, tiene sentido guardar la información más confidencial en un entorno seguro (como iOS Keychain). Seguramente un hacker determinado probablemente será capaz de vencerlo, pero uno menos determinado no lo hará y eso es una victoria. – lm2s

Cuestiones relacionadas