Almacenamiento de token de authentication en iOS

Estoy desarrollando una aplicación de iOS y el usuario se autentica con mi service web. No quiero que se conecten cada vez que se inicie la aplicación (el token dura un mes). Así que me gustaría almacenar esto en el dispositivo en alguna parte.

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

¿Puedo confiar solo en que la aplicación permanezca suspendida y en save el token en 'memory'?

2 opciones

  • Hacer uso de NSUserdefault (almacenar como token de acceso o inputs de campo de text [Recordar mi opción])
  • Acceso a llavero (recomendado) para hacer el trabajo.

NSUserdefaults no es seguro para almacenar tales valores creíbles que son para fines de authentication. Keychain, por otro lado, está hecho para hacer esto, seguro y protegido.

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

Mira el service de llaveros para iOS . Este es el mejor lugar para almacenar cosas como passwords, tokens y otras keys.

No puedes hacerlo "de forma segura". Un token es de conocimiento público, y tan pronto como esté en su dispositivo, un hacker podría acceder 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 pueden esperar hasta que caduque y, luego, se enganchará al siguiente cuando entre en el cable la próxima vez. Sus tokens de acceso no son lo que necesita preocuparse por la security, porque no puede, de hecho, hacerlo en un entorno mobile.

Lo que esto significa es que puede savelo en cualquier lugar que desee. NSUserDefaults está bien, el llavero está bien, una database está bien, un file de text en el directory de documentos está bien. Todos ellos son igualmente seguros porque un hacker determinado puede simplemente esperar la oportunidad correcta de acceder a los datos que desea. En su lugar, debería preocuparse por proteger las cnetworkingenciales de authentication de los usuarios. Asegúrese de almacenarlos en el llavero y solo se comunique con su API a través de HTTPS a un server con un certificate SSL válido.