Partager via


Empreinte digitale biométrique

Cet article explique comment ajouter la biométrie des empreintes digitales à votre application Windows, notamment une demande d’authentification par empreinte digitale lorsque l’utilisateur doit donner son consentement à une action particulière augmente la sécurité de votre application. Par exemple, vous pouvez exiger une authentification par empreinte digitale avant d’autoriser un achat in-app ou avant l’accès à des ressources restreintes. L’authentification par empreinte digitale est gérée par l’intermédiaire de la classe UserConsentVerifier dans l’espace de noms Windows.Security.Credentials.UI.

Les API Windows Runtime (WinRT) pour la biométrie des empreintes digitales font partie du Kit de développement logiciel (SDK) Windows. Ces API ont été créées pour une utilisation dans des applications plateforme Windows universelle (UWP), mais elles peuvent également être utilisées dans des applications WinUI ou dans des applications de bureau empaquetées, notamment WPF et Windows Forms. Pour plus d’informations sur l’utilisation des API WinRT dans votre application de bureau Windows, consultez Appeler les API Windows Runtime dans les applications de bureau.

Vérifier l’appareil pour un lecteur d’empreinte digitale

Pour savoir si l’appareil a un lecteur d’empreinte digitale, appelez UserConsentVerifier.CheckAvailabilityAsync. Même si un appareil prend en charge l’authentification par empreinte digitale, votre application doit toujours fournir aux utilisateurs une option dans Paramètres pour l’activer ou la désactiver.

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. Pour demander le consentement de l’utilisateur à partir d’une analyse d’empreinte digitale, appelez la méthode UserConsentVerifier.RequestVerificationAsync . Pour que l’authentification par empreinte digitale fonctionne, l’utilisateur doit avoir précédemment ajouté une « signature » à la base de données d’empreintes digitales.
  2. Lorsque vous appelez UserConsentVerifier.RequestVerificationAsync, l’utilisateur reçoit une boîte de dialogue modale demandant une analyse d’empreinte digitale. Vous pouvez fournir un message à la méthode UserConsentVerifier.RequestVerificationAsync qui sera affichée à l’utilisateur dans le cadre de la boîte de dialogue modale, comme illustré dans l’image suivante.
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;
}