Tinkoffでは、Windows Helloを使用してユーザーを認証する方法

Windowsこんにちは

Windows Helloは、指紋、網膜、顔の3Dスキャン、さらには手のひらの静脈パターンを使用するユーザー向けの生体認証技術です。

金融サービスの分野では、エラーのない安​​全なユーザー認証が重要です。 承認には、ユーザー名とパスワード、または電話番号とパスワードの束から、接続された携帯電話番号に送信されたコードによる確認付きの2要素システムを使用します。 許可ゾーンへのアクセスをさらに簡素化するために、4桁のPINコードが使用されます。


認証とPINコードの作成後、ユーザー認証をWindows Helloに渡すことができます。 必要なアクションの一般的なシーケンスは次のとおりです。



コード例で各ステップをさらに詳しく見てみましょう。

Windows Helloを使用するための最小前提条件は、システムに入るための構成済みPINです。 ユーザーが生体認証用の認定機器を持っていない場合、PINコードが使用されます。

このようにします:

public async Task<WindowsHelloStatus> CheckHelloStatusAsync() { var checkAvailabilityAsyncOperation = UserConsentVerifier.CheckAvailabilityAsync(); var checkAvailabilityTask = checkAvailabilityAsyncOperation.AsTask(); var completedTask = await Task.WhenAny(checkAvailabilityTask, Task.Delay(TimeSpan.FromSeconds(1))); if(completedTask == checkAvailabilityTask) { var availability = checkAvailabilityTask.Result; switch (availability) { case UserConsentVerifierAvailability.Available: return WindowsHelloStatus.Available; case UserConsentVerifierAvailability.DeviceBusy: return WindowsHelloStatus.Busy; case UserConsentVerifierAvailability.DisabledByPolicy: return WindowsHelloStatus.DisabledByPolicy; case UserConsentVerifierAvailability.NotConfiguredForUser: return WindowsHelloStatus.NotConfiguredForUser; default: return WindowsHelloStatus.Unavailable; } } checkAvailabilityAsyncOperation.Cancel(); return WindowsHelloStatus.Unavailable; } 


このコードは質問を引き起こさないはずです。ここでは、Windows Helloサービスのステータスがチェックされます。 UserConsentVerifierAvailabilityには、サービスのステータスに関するオプションがもう少しありますが、上記の例では十分にリストされています。

Tinkoff PINコードを設定し、Windows Helloの可用性を正常に確認した後、このサービスに接続することをユーザーに提案します。


ユーザーが同意する場合、ユーザーを認証する必要があります。そのため、次のコードを使用します。

 public async Task<bool> VerifyUserAsync() { if (await CheckHelloStatusAsync() != WindowsHelloStatus.Available) return false; var result = await UserConsentVerifier.RequestVerificationAsync(requestMessage); return result == UserConsentVerificationResult.Verified; } 

この例では、現在デバイスを使用しているユーザーがアカウントの所有者と同じ人物であることを確認します。 方法:UserConsentVerifier.RequestVerificationAsyncは、指紋、網膜、またはその他の方法による認証であるかどうかにかかわらず、利用可能な検証オプションを使用してユーザー検証を処理するメソッドです。 利便性は、これが何をどのように発生するかを気にする必要がないことです。主なことは、このオプションが安全要件を満たしていることです。

Windows Helloサービスを使用せずに、アプリケーションが起動され、ユーザーが長時間アイドル状態になるたびにPINコードを要求します。 このコードは、ユーザーがアプリケーションで作業しているときにリクエストを検証するために使用されます。 Windows Helloを使用する場合、ユーザーは毎回このコードを入力する必要がなく、このコードの安全な保管に関して疑問が生じます。 このため、PasswordVaultが役立ちます。セキュリティに特別な注意を払う必要があるデータを保存できます。 このサービスは、データをクリアテキストで保存しません。 特別な暗号化チップを搭載したデバイスでは、サービスはこのチップを保護に使用し、暗号化チップのないデバイスでは、ソフトウェアによって保護を実現します。

 /// <summary> ///        /// </summary> /// <param name="userId"> </param> /// <param name="pin">- </param> public void AddCredentials(string userId, string pin) { var vault = new PasswordVault(); vault.Add(new PasswordCredential(«  », userId, pin)); } 

この例は、保存のためにPasswordVaultにデータを追加することがどれほど簡単かを示しています。

アプリケーションでユーザーが変更または終了した場合は、パスワードストアからユーザーデータを削除する必要があります。

 public void RemoveCredentials(string userId) { var vault = new PasswordVault(); var credentials = vault.Retrieve(«  », userId); if (credentials != null) vault.Remove(credentials); } 

次の例は、アプリケーションの起動後に使用するメソッドを示しています。

 public async Task<string> SignInAsync(string userId) { if (await CheckHelloStatusAsync() != WindowsHelloStatus.Available) return null; var result = await UserConsentVerifier.RequestVerificationAsync(requestMessage); if (result != UserConsentVerificationResult.Verified) return null; var vault = new PasswordVault(); var credentials = vault.Retrieve(appCredentialsName, userId); return credentials?.Password; } 

最初に、Windows Helloサービスが利用可能であることを確認します。 次に、アプリケーションにアカウントの所有者であるユーザーが使用していることを確認するようサービスに依頼します。 ユーザーがテストに合格すると、Tinkoff PINコードが設定されたときに保存されたこのユーザーのPINコードを取得します。

そして今、5つの小さなメソッドの助けを借りて、Windows Helloをアプリケーションに統合しました。

Source: https://habr.com/ru/post/J358888/


All Articles