En muchos desarrollos móviles tenemos la necesidad de contar con seguridad para limitar su acceso. Cuando hablamos de seguridad lo primero que se nos viene a la mente es la autenticación. La autenticación habitual, es decir, con usuario y contraseña, requieren una serie de características como gestión de las credenciales, complejidad de la contraseña, recuperación, etc.
Con Windows 10 tenemos dos nuevas tecnologías destinidas a facilitar la gestión de la seguridad tanto para usuarios como para desarrolladores integrando la tecnologías en sus Apps. Estas tecnologías son:
- Windows Hello
- Microsoft Passport
Windows Hello
El primero de ellos es un framework biométrico que soporta:
- Reconocimiento facial
- Escaneo de Iris
- Huella
NOTA: Windows Hello requiere de hardware específico como lector de huellas o sensor
Microsoft Passport
Microsoft Passport aporta un mecanismo de autenticación que reemplaza las clásicas contraseñas por una combinación del dispositivo junto a un PIN definido por el usuario o bien datos biométricos aportados por Windows Hello.
Datos biométricos, uso de huellas dactilares
Nuestro objetivo en este artículo será revisar todas las posibilidades brindadas por UserConsentVerifier. Esta nueva clase introducida en Windows 10 nos permite comprobar la disponibilidad de dispositivo que permita realizar una verificación biométrica (huella dactilar).
En nuestro ejemplo, contaremos con una interfaz sencilla:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Content="Check UserConsent Availability" Command="{Binding AvailabilityCommand}" /> <TextBlock Text="Request UserConsent Verification" Margin="0,24,0,0"/> <TextBox PlaceholderText="Insert Message..." Text="{Binding Message, Mode=TwoWay}"/> <Button Content="Request UserConsent Verification" Command="{Binding VerificationCommand}" IsEnabled="{Binding IsUserConsentAvalaible}"/> </StackPanel> |
Un primer botón que nos indique la disponibilidad de dispositivo que permita realizar una verificación biométrica mientras que el segundo nos permitirá realizar la verificación del usuario con los datos biométricos.
Ambos botones contarán con un comando asociado en la ViewModel. El primero:
1 2 3 4 5 6 7 8 9 10 11 |
private ICommand _availabilityCommand; public ICommand AvailabilityCommand { get { return _availabilityCommand = _availabilityCommand ?? new DelegateCommandAsync(AvailabilityCommandExecute); } } public async Task AvailabilityCommandExecute() { } |
Y el segundo:
1 2 3 4 5 6 7 8 9 10 11 |
private ICommand _verificationCommand; public ICommand VerificationCommand { get { return _verificationCommand = _verificationCommand ?? new DelegateCommandAsync(VerificationCommandExecute); } } public async Task VerificationCommandExecute() { } |
Nada especial a destacar llegados aquí. Continuamos…
Detectar si contamos con lector de huellas
Para poder utilizar datos biométricos en nuestra aplicación debemos antes que nada verificar si el dispositivo cuenta con lector de huellas. Podemos utilizar el método UserConsentVerifier.CheckAvailabilityAsync para la verificación.
En el servicio:
1 2 3 4 5 6 7 |
public async Task<UserConsentVerifierAvailability> GetUserConsentAvailabilityAsync() { UserConsentVerifierAvailability consentAvailability = await UserConsentVerifier.CheckAvailabilityAsync(); return consentAvailability; } |
El resultado será un valor de la enumeración UserConsentVerifierAvailability. Los posibles valores de la enumeración son:
- Available: Dispositivo de verificación biométrica disponible.
- DeviceBusy: El dispositivo de verificación biométrica está realizando una operación y no está disponible.
- DeviceNorPresent: No hay dispositivo de verificación biométrica.
- DisabledByPolicy: Por directiva de grupo, la verificación biométrica esta deshabilitada.
- NotConfiguredForUser: No hay dispositivo de verificación biométrica configurado por el usuario actual.
Desde la viewmodel de la aplicación utilizaremos el servicio para la verificación:
1 |
IsUserConsentAvalaible = await _userConsentVerifierService.CheckUserConsentAvailabilityAsync(); |
Hasta este punto tenemos lo necesario para detectar si contámos con la posibilidad de usar datos biométricos o no.
Solicitud de consentimiento
Llega el momento de usar datos biométricos. Tras verificar la disponibilidad del lector debemos pedir consentimiento utilizando el método UserConsentVerifier.RequestVerificationAsync.
En nuestro servicio:
1 2 3 4 5 6 7 8 |
public async Task<UserConsentVerificationResult> GetRequestUserConsentVerificationAsync(string message) { UserConsentVerificationResult consentResult = await UserConsentVerifier.RequestVerificationAsync(message); return consentResult; } |
NOTA: Para que la autenticación con la huella funcione correctamente, el usuario debe habe registrado su huella previamente.
Desde la viewmodel, bastará con usar el método anterior:
1 |
var result = await _userConsentVerifierService.GetRequestUserConsentVerificationAsync(Message); |
Como parámetro pasamos una cadena. Esta cadena se utilizará para mostrar un mensaje al usuario en la solicitud de comprobación biométrica. En cuanto al resultado, obtenemos un valor de la enumeración UserConsentVerificationResult:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
switch(result) { case Windows.Security.Credentials.UI.UserConsentVerificationResult.Canceled: message = "Consent request prompt was canceled."; break; case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceBusy: message = "Biometric device is busy."; break; case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceNotPresent: message = "Biometric device not found."; break; case Windows.Security.Credentials.UI.UserConsentVerificationResult.DisabledByPolicy: message = "Disabled by policy."; break; case Windows.Security.Credentials.UI.UserConsentVerificationResult.NotConfiguredForUser: message = "No fingeprints registered."; break; case Windows.Security.Credentials.UI.UserConsentVerificationResult.RetriesExhausted: message = "Too many retries."; break; case Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified: message = "User verified."; break; } |
Los valores de la enumeración son:
- Verified: Huella comprobada correctamente.
- DeviceNotPresent: Dispositivo biométrico no disponible.
- NotConfiguredForUser: No hay ningún dispositivo biométrico configurado por el usuario actualo.
- DisableByPolicy: La directiva de grupo ha deshabilitado el dispositivo biométrico.
- DeviceBusy: Dispositivo biométrico ocupado al encontrarse realizando una operación.
- RetriesExhausted: Tras 10 intentos, la solicitud de comprobación original y todos los intentos han fallado.
- Canceled: Cancelación de la operación.
Sencillo, ¿cierto?.
Si ejecutamos la aplicación en un Lumia con opción biométrica, como por ejemplo un Lumia 950XL, ofrecerá dos opciones de auenticación:
- Escáner de Iris
- Código PIN
Igual resultado obtendremos en un PC que cuente con RealSense. Sin embargo, si probamos en un dispositivo sin posibilidad de detección biométrica aun así nos permitirá la validación vía código PIN.
De forma evidente no es un mecanismo de autenticación biométrica pero si suficiente para cubrir las necesidades de la API.
¿Te ha resultado interesante?. Anímate a descargar el ejemplo utilizado a lo largo del artículo para continuar probando y explorando las posibilidades!
Más información
- Centro de desarrollo Windows: UserConsentVerifier Class
- GitHub: UserConsentVerifier sample
Deja un comentario