다음을 통해 공유


지문 생체 인식

이 문서에서는 사용자가 특정 작업에 동의해야 앱의 보안이 강화되는 경우 지문 인증 요청을 포함하여 Windows 앱에 지문 생체 인식을 추가하는 방법에 대해 설명합니다. 예를 들어, 지문 인증을 앱 내 구매를 권한 부여하거나 제한된 리소스에 액세스하기 전에 요구할 수 있습니다. 지문 인식은 Windows.Security.Credentials.UI 네임스페이스의 UserConsentVerifier 클래스를 사용하여 관리됩니다.

지문 생체 인식용 WinRT(Windows 런타임) API는 Windows SDK(소프트웨어 개발 키트)일부입니다. 이러한 API는 UWP(유니버설 Windows 플랫폼) 앱에서 사용하기 위해 만들어졌지만 WinUI 앱 또는 WPF 및 Windows Forms를 비롯한 패키지 데스크톱 앱에서도 사용할 수 있습니다. Windows 데스크톱 앱에서 WinRT API를 사용하는 방법에 대한 자세한 내용은 데스크톱 앱에서 Windows 런타임 API 호출을 참조하세요.

장치에서 지문 reader를 확인합니다.

장치에 지문 reader가 있는지 확인하려면, 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;
}