Saltar al contenido →

Face ID Tutorial

En esta guía verás com usar una cara o huella dactilar para validar un usuario, o lo que es lo mismo, autentificarlo mediante Face ID o Touch ID.

Notas sobre la seguridad

Antes de empezar hay que decir que estos frameworks son totalmente seguros ya que en ningún momento acceden a los datos de autentificación, como las imágenes de tus huellas dactilares.

Se limitan a comunicarse con el Secure Enclave, una parte del sistema dedicada a la seguridad que está aislada del resto de componentes, para decirle que alguien necesita validar la identidad en el dispositivo, momento en el que nuestra app pierde el control sobre el proceso de validación y se limita a esperar que le devuelvan un Bool con el resultado de la autentificación.

Primeros pasos. Info.plist

Antes de nada tenemos que añadir un entrada el archivo Info.plist de nuestro proyecto. La entrada es para la clave NSFaceIDUsageDescription y su valor asociado es un String donde explicamos la razón que nos lleva a solicitar el uso de Face ID cuando se le pida permiso al usuario para acceder a Face ID.

Primero comprobar…

Lo primero que debemos hacer es invocar a la función canEvaluatePolicy Esta función es la encargada de hacer una revisión prevía a la evaluación de identidad para ver si se cumple con los requisitos, por ejemplo, que si solicitamos autentificación biométrica en el dispositivo esté presente Face ID o Touch ID en correcto funcionamiento.

Estas políticas las encontramos en la enumeración LAPolicy ¿Y cuáles podemos usar? Pues a día de hoy se reducen a dos:

  • Autentificar al usuario usando únicamente métodos biométricos, es decir, Face ID o Touch ID. Asociada al valor deviceOwnerAuthenticationWithBiometrics
  • Verificar la identidad bien de forma biométrica o bien con el código de acceso del dispositivo. Asociada al valor deviceOwnerAuthentication

Es preferible usar la segunda opción, deviceOwnerAuthentication, por si los sitemas biométricos no estuvieran disponibles en el terminal del usuario por el motivo que fuera.

…Y después autentificar

Tras pasar la comprobación con éxito toca evaluar la identidad del solicitante. He comentado arriba que los desarrolladores no accedemos a esta información, sino que pasamos la solicitud al Secure Enclave y esperamos su respuesta.

Esta evaluación la hacemos con la función evaluatePolicy que recibe como parámetros el política de autentificación, un mensaje explicando el porque de está petición y un closure que, a modo de callback, es donde el Secure Enclave nos dará el veredicto.

Este closure tiene como parámetros un tipo Bool que no dira si el usuario es válido (true) o si por el contrario no está identificado en el terminal (false). El segundo parámetro es un Error donde podremos ver las causas del fallo si este se produce.

Al final todo este proceso quedaría más o menos así

Probando en el simulador

No es necesario disponer de un dispositivo con Face ID para poder probar el código ya que el simulador de Xcode permite simular el intento de desbloqueo con Face ID.

¿Cómo sé qué error se produce en concreto?

Ese dato lo obtenemos gracias a la enumeración LAError.Code. Este se crea gracias a la variables _code del objeto Error que nos llega en el closure

La propiedad localizedDescription se encuentra implementado en la extensión incluida en el proyecto dentro de la carpeta Extensions

Conclusión

En este primera entrega hemos visto la manera de integrar Face ID o Touch ID dentro de nuestras apps y el próximo artículo de la serie veremos cómo emplearlo para otorgar acceso a Keychain

Código Fuente

En este repositorio de GitHub podéis descargar la app que acompaña este artículo

Enlaces de Interés

Publicado en iOS Seguridad Swift