Login / Contraseña de la authentication de CloudKit

Aquí está mi problema, construí una aplicación usando la solución Parse. En esta aplicación utilicé la authentication básica de Parse. Después de la muerte de Parse necesito migrar.

Me gustaría implementar una authentication con la solución CloudKit, pero no estoy seguro de que sea una buena práctica. Entendí que la authentication básica de Cloudkit se basaba en la count de usuario de Apple. Pero necesito tener una authentication con inicio de session / contraseña.

No hay un campo de tipo "contraseña" como en Parse, así que no sé cómo almacenar la contraseña en la tabla Usuarios de manera segura. Y no estoy seguro de que save la contraseña en la sección pública sea segura.

Me gustaría saber si existen buenas prácticas para implementar la authentication básica en CloudKit (inicio de session / contraseña).

Gracias de antemano por su ayuda;)

PS: Otra solución debería ser moverse a la base de firebase, pero prefiero la lógica de CloudKit por el momento.

Para administrar el inicio de session / passwords con CloudKit, sin código de inicio de session de backend, pero permitiendo que el usuario inicie session desde otra location (aplicación web, aplicación de Android, etc. utilizando el acceso de key del server Cloudkit recientemente introducido), debe administrar la lógica de inicio de session la aplicación:

Flujo de trabajo:

A. Inscripción de usuario

  1. Cree un contenedor de "usuarios" en la database pública en Cloudkit Dashboard.

  2. Cuando el usuario escribe una contraseña al registrarse, cifre la contraseña.

  3. Haga una request al contenedor "usuarios" si ya existe un nombre de usuario / correo electrónico. Si lo hace, avisa al usuario. Si no es así, continúe el process.
  4. Cargue el correo electrónico / nombre de usuario y la contraseña cifrada en el contenedor público de "usuarios" en Cloudkit. También incluya iCloudId del usuario.

B. Iniciar session de usuario

  1. Cuando el usuario escriba su nombre de usuario / correo electrónico y contraseña, consulte la contraseña cifrada de los "usuarios" con el nombre de usuario / correo electrónico. Si la request es nula, significa que este nombre de usuario / correo electrónico no existe en la database.
  2. Si la database devuelve la contraseña cifrada, descifrela en la aplicación y compárela con la contraseña que escribió el usuario en el formulario de inicio de session. Si no coinciden, advierta al usuario que las passwords no coinciden.

C. El usuario olvidó la contraseña

  • Para que el usuario cambie la contraseña, el usuario debe iniciar session en su Cuenta iCLoud para comparar que el iCloudId de la count que solicita la modificación de la contraseña es igual al iCLoudId del usuario guardado en CloudKit.
  • De forma alternativa, puede solicitar preguntas de security al usuario cuando se registre, y luego searchlas cuando el usuario solicite cambiar la contraseña.

Esta no es una solución recomendada (en términos de escalabilidad), pero creo que responde a su pregunta.

Cuando elige CloudKit, debe usar la authentication iCloud de Apple y no puede almacenar la contraseña del usuario.

Pero puedes build una capa de authentication adicional. Cuando un usuario ha iniciado session con iCloud, puede pedirle que elija una contraseña, que puede almacenar en un tipo de logging privado (!) (Con una reference al usuario de iCloud).

De esta forma, un usuario debe iniciar session primero con iCloud y luego ingresar la contraseña específica de la aplicación en su aplicación.