¿Cómo se implementa / maneja generalmente la creación y administración de cuentas de usuario en aplicaciones iOS ya que no parece haber ningún soporte incorporado?

Ya sea que esté escribiendo una aplicación independiente o interactuando con un servidor back-end, a nivel de implementación, un “usuario” es solo otro objeto en su modelo de datos.

Cada objeto de usuario generalmente contiene una dirección de correo electrónico / nombre de usuario y una contraseña, y esta última generalmente se almacena en una forma encriptada irreversiblemente utilizando un algoritmo como bcrypt; también puede tener otras configuraciones asociadas con ese usuario, como una fecha de nacimiento o un nombre amigable para los humanos.

Cuando desea iniciar sesión, un controlador busca el objeto de usuario apropiado por nombre de usuario, verifica que la contraseña sea correcta y, si es así, establece algún tipo de variable que indica qué usuario está conectado actualmente. Otros objetos en su modelo contienen un referencia al usuario al que pertenecen, y antes de que un controlador muestre un objeto, verifica si el usuario actualmente conectado puede verlo.

Cuando trabaja con un servidor de fondo, el objeto de usuario del servidor generalmente se verá así. El objeto de usuario de la aplicación suele ser ligeramente diferente. La aplicación no puede cifrar irreversiblemente las contraseñas, ya que necesita enviar la versión sin cifrar al servidor, por lo que, en general, en lugar de contener una contraseña, contendrá algún tipo de token de acceso generado por un mecanismo como OAuth. Cuando su aplicación inicia sesión por primera vez, la aplicación envía al servidor las credenciales de inicio de sesión (por ejemplo, nombre de usuario y contraseña), y si son correctas, el servidor responde con un token de acceso recién creado; la aplicación almacena ese token y lo incluye en las solicitudes de ese usuario. Esto permite que el servidor se asegure de que el usuario realmente haya iniciado sesión sin que la aplicación tenga que almacenar la contraseña del usuario.

Si su aplicación almacena secretos como tokens de acceso o contraseñas, y no puede usar un algoritmo de cifrado irreversible como bcrypt para protegerlos, tenga cuidado de almacenarlos de forma segura. En iOS, Apple proporciona el llavero para este propósito. El llavero tiene protecciones especiales a nivel del sistema operativo que no puede proporcionar usted mismo. Y como beneficio adicional, puede indicarle al llavero que sincronice una entrada a través de iCloud, para que pueda escribir su aplicación para iniciar sesión automáticamente en el iPad de un usuario si ya ha usado su aplicación en su iPhone.

Finalmente, en lugar de escribir su propio servidor back-end, es posible que pueda usar CloudKit de Apple. Tiene una forma especial de crear y administrar cuentas de usuario, que están vinculadas a las ID de Apple (cuentas de iTunes). Esto significa que no tiene que perder el tiempo con las contraseñas o los tokens de autenticación, pero también significa que una sola persona no puede administrar fácilmente varias cuentas. Eso puede o no ser un problema para su caso de uso. CloudKit también tiene muchas otras limitaciones, y no es adecuado para todas las aplicaciones, pero cuando es adecuado puede proporcionar una experiencia de usuario muy agradable.

Tradicionalmente, lo construyó usted mismo o utilizó un servicio como Parse o Titanium Appcelerator.

Apple ahora tiene su propia solución nativa, CloudKit, pero está vinculada solo a iOS. En otras palabras, si escribe una aplicación usando CloudKit, no se puede portar fácilmente a otras plataformas.