10yroの開発日記

福岡にある株式会社10yro(トイロ)のエンジニアが書いています

C# Windows Hello認証の実装

みなさんご利用されていると思いますが、Windows 10や11にはWindows HelloというPINや顔認証、指紋認証の仕組みがあります。
そのWindows Helloでの認証をWindowsのアプリでも利用することができます。
今回はその実装方法についてです。言語はC#Windows Formsでサンプルアプリを実装したいと思います。

Microsoft.Windows.SDK.Contractsのインストール

Windows Helloを利用するためにNuGetで「Microsoft.Windows.SDK.Contracts」をインストールします。
いつものようにNuGetの管理画面を表示してインストールします。

インストールできました。

Formの作成

とても簡単な以下のような画面を作ります。

「WindowsHello認証」ボタンをクリックすると、Windows Helloの認証が実行され、
認証OKの場合にはメッセージダイアログで「OK」と表示し、
認証NGの場合にはメッセージダイアログで「NG」と表示します。

Windows Hello認証の実装

実装もとても簡単で、以下のような実装になります。

using System;
using System.Windows.Forms;

namespace WindowsHelloSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// ボタンクリック時の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void button1_Click(object sender, EventArgs e)
        {
            var available = await Windows.Security.Credentials.UI.UserConsentVerifier.CheckAvailabilityAsync();
            if (available == Windows.Security.Credentials.UI.UserConsentVerifierAvailability.Available)
            {
                var result = await Windows.Security.Credentials.UI.UserConsentVerifier.RequestVerificationAsync("Sampleアプリの認証を行います");
                if (result == Windows.Security.Credentials.UI.UserConsentVerificationResult.Verified)
                {
                    MessageBox.Show("OK");
                } else
                {
                    MessageBox.Show("NG");
                }
            } else
            {
                MessageBox.Show("Windows Helloに対応していない端末です。");
            }
        }
    }
}

Windows.Security.Credentials.UI.UserConsentVerifier.CheckAvailabilityAsync()Windows Helloに対応しているかをチェックし、チェックOKの場合にWindows.Security.Credentials.UI.UserConsentVerifier.CheckAvailabilityAsync()で認証を実行し、戻り値がVerifiedであれば認証OKとなります。

動かしてみる

ボタンをクリックするとWindows Helloのダイアログが表示され、PIN入力または顔認証、指紋認証を行うことができます。

まとめ

認証機能があるWindowsアプリを開発する際は、Windows Hello認証機能も入れてみてはいかがでしょうか。
Windowsと同じように毎回パスワードを入力する手間が省けるので、便利だと思います。