Compartir a través de


Biometría de huellas digitales

En este artículo se explica cómo agregar biometría de huellas digitales a la aplicación de Windows, incluida una solicitud de autenticación con huella digital cuando el usuario debe dar su consentimiento a una acción determinada aumenta la seguridad de la aplicación. Por ejemplo, puedes solicitar la autenticación con huella digital antes de autorizar una compra desde la aplicación o de permitir el acceso a recursos restringidos. Puedes administrar la autenticación con huella digital mediante la clase UserConsentVerifier del espacio de nombres Windows.Security.Credentials.UI.

Las API de Windows Runtime (WinRT) para la biometría de huellas digitales forman parte del Kit de desarrollo de software (SDK) de Windows. Estas API se crearon para su uso en aplicaciones de Plataforma universal de Windows (UWP), pero también se pueden usar en aplicaciones winUI o en aplicaciones de escritorio empaquetadas, incluidas WPF y Windows Forms. Para obtener más información sobre el uso de las API de WinRT en la aplicación de escritorio de Windows, consulta Llamar a las API de Windows Runtime en aplicaciones de escritorio.

Comprobar el dispositivo para ver un lector de huellas digitales

Para averiguar si el dispositivo tiene un lector de huellas digitales, llame a UserConsentVerifier.CheckAvailabilityAsync. Incluso si un dispositivo admite la autenticación con huellas digitales, la aplicación todavía debe proporcionar a los usuarios una opción en Configuración para habilitarla o deshabilitarla.

public async System.Threading.Tasks.Task<string> CheckFingerprintAvailability()
{
    string returnMessage = "";

    try
    {
        // Check the availability of fingerprint authentication.
        var ucvAvailability = await Windows.Security.Credentials.UI.UserConsentVerifier.CheckAvailabilityAsync();

        switch (ucvAvailability)
        {
            case Windows.Security.Credentials.UI.UserConsentVerifierAvailability.Available:
                returnMessage = "Fingerprint verification is available.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerifierAvailability.DeviceBusy:
                returnMessage = "Biometric device is busy.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerifierAvailability.DeviceNotPresent:
                returnMessage = "No biometric device found.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerifierAvailability.DisabledByPolicy:
                returnMessage = "Biometric verification is disabled by policy.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerifierAvailability.NotConfiguredForUser:
                returnMessage = "The user has no fingerprints registered. Please add a fingerprint to the " +
                                "fingerprint database and try again.";
                break;
            default:
                returnMessage = "Fingerprints verification is currently unavailable.";
                break;
        }
    }
    catch (Exception ex)
    {
        returnMessage = $"Fingerprint authentication availability check failed: {ex.ToString()}";
    }

    return returnMessage;
}
  1. Para solicitar el consentimiento del usuario desde un examen de huellas digitales, llame al método UserConsentVerifier.RequestVerificationAsync . Para que la autenticación con huellas digitales funcione, el usuario debe haber agregado previamente una "firma" de huella digital a la base de datos de huellas digitales.
  2. Cuando se llama a UserConsentVerifier.RequestVerificationAsync, se presenta al usuario un cuadro de diálogo modal que solicita un examen de huella digital. Puede proporcionar un mensaje al método UserConsentVerifier.RequestVerificationAsync que se mostrará al usuario como parte del cuadro de diálogo modal, como se muestra en la siguiente imagen.
private async System.Threading.Tasks.Task<string> RequestConsent(string userMessage)
{
    string returnMessage;

    if (String.IsNullOrEmpty(userMessage))
    {
        userMessage = "Please provide fingerprint verification.";
    }

    try
    {
        // Request the logged on user's consent via fingerprint swipe.
        var consentResult = await Windows.Security.Credentials.UI.UserConsentVerifier.RequestVerificationAsync(userMessage);

        switch (consentResult)
        {
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified:
                returnMessage = "Fingerprint verified.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceBusy:
                returnMessage = "Biometric device is busy.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.DeviceNotPresent:
                returnMessage = "No biometric device found.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.DisabledByPolicy:
                returnMessage = "Biometric verification is disabled by policy.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.NotConfiguredForUser:
                returnMessage = "The user has no fingerprints registered. Please add a fingerprint to the " +
                                "fingerprint database and try again.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.RetriesExhausted:
                returnMessage = "There have been too many failed attempts. Fingerprint authentication canceled.";
                break;
            case Windows.Security.Credentials.UI.UserConsentVerificationResult.Canceled:
                returnMessage = "Fingerprint authentication canceled.";
                break;
            default:
                returnMessage = "Fingerprint authentication is currently unavailable.";
                break;
        }
    }
    catch (Exception ex)
    {
        returnMessage = $"Fingerprint authentication failed: {ex.ToString()}";
    }

    return returnMessage;
}