Поделиться через


Биометрия отпечатков пальцев

В этой статье объясняется, как добавить биометрические данные отпечатков пальцев в приложение Windows, включая запрос на проверку подлинности отпечатков пальцев, когда пользователь должен согласиться на определенное действие, повышает безопасность приложения. Например, перед авторизацией покупки в приложении или доступом к ограниченным ресурсам можно требовать проверку подлинности отпечатков пальцев. Проверка подлинности отпечатков пальцев управляется с помощью класса UserConsentVerifier в пространстве имен Windows.Security.Credentials.UI .

API-интерфейсы среда выполнения Windows (WinRT) для биометрических данных отпечатков пальцев являются частью пакета SDK для Windows. Эти API были созданы для использования в приложениях универсальная платформа Windows (UWP), но они также могут использоваться в приложениях WinUI или в упакованных классических приложениях, включая WPF и Windows Forms. Дополнительные сведения об использовании API WinRT в классическом приложении Windows см. в статье "Вызов API среда выполнения Windows" в классических приложениях.

Проверка устройства для средства чтения отпечатков пальцев

Чтобы узнать, имеет ли устройство средство чтения отпечатков пальцев, вызовите UserConsentVerifier.CheckAvailabilityAsync. Даже если устройство поддерживает проверку подлинности отпечатков пальцев, ваше приложение по-прежнему должно предоставить пользователям параметр в параметрах, чтобы включить или отключить его.

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. Чтобы запросить согласие пользователя от сканирования отпечатков пальцев, вызовите метод UserConsentVerifier.RequestVerificationAsync . Для проверки подлинности отпечатков пальцев пользователь должен ранее добавить "подпись" в базу данных отпечатков пальцев.
  2. При вызове UserConsentVerifier.RequestVerificationAsync пользователь будет представлен модальным диалогом, запрашивающим сканирование отпечатков пальцев. Вы можете предоставить сообщение методу UserConsentVerifier.RequestVerificationAsync , который будет отображаться пользователю в модальном диалоговом окне, как показано на следующем рисунке.
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;
}