Compartilhar via


Biometria por impressão digital

Este artigo explica como adicionar biometria de impressão digital ao seu aplicativo do Windows, incluindo uma solicitação de autenticação de impressão digital quando o usuário deve consentir com uma ação específica que aumenta a segurança do seu aplicativo. Por exemplo, você pode exigir autenticação por impressão digital antes de autorizar uma compra realizada em aplicativo ou acessar recursos restritos. A autenticação por impressão digital é gerenciada com a classe UserConsentVerifier no namespace Windows.Security.Credentials.UI.

As APIs do WinRT (Tempo de Execução do Windows) para biometria de impressão digital fazem parte do SDK (Software Development Kit) do Windows. Essas APIs foram criadas para uso em aplicativos UWP (Plataforma Universal do Windows), mas também podem ser usadas em aplicativos WinUI ou em aplicativos da área de trabalho empacotados, incluindo WPF e Windows Forms. Para obter mais informações sobre como usar APIs do WinRT em seu aplicativo da área de trabalho do Windows, consulte Chamar APIs do Tempo de Execução do Windows em aplicativos da área de trabalho.

Verifique se há um leitor de impressão digital no dispositivo

Para descobrir se o dispositivo tem um leitor de impressão digital, chame UserConsentVerifier.CheckAvailabilityAsync. Mesmo que um dispositivo dê suporte à autenticação por impressão digital, seu aplicativo ainda deve fornecer aos usuários uma opção em Configurações para ativá-la ou desabilitá-la.

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 o consentimento do usuário de uma verificação de impressão digital, chame o método UserConsentVerifier.RequestVerificationAsync . Para que a autenticação de impressão digital funcione, o usuário deve ter adicionado anteriormente uma "assinatura" de impressão digital ao banco de dados de impressões digitais.
  2. Quando você chama o UserConsentVerifier.RequestVerificationAsync, o usuário recebe uma caixa de diálogo modal solicitando uma verificação de impressão digital. Você pode fornecer uma mensagem para o método UserConsentVerifier.RequestVerificationAsync que será exibida ao usuário como parte da caixa de diálogo modal, conforme mostrado na imagem a seguir.
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;
}