マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

クライアント実装

共通

policyに適合する認証器を調べる

認証器の調査: KeyCredentialManager?.IsSupportedAsync?()メソッド

if (await KeyCredentialManager.IsSupportedAsync() == false)
{
  ・・・

キーのストア&コンテナを開く: KeyCredentialManager?.OpenAsync?()メソッド

当該ユーザ&アプリケーションのキーのストア&コンテナを開く。

// retrieve private key for sign
KeyCredentialRetrievalResult res =
  await KeyCredentialManager.OpenAsync("keyName");

登録

if (res.Status == KeyCredentialStatus.NotFound)
{
  ・・・

の場合、

キーペアを作成する: KeyCredentialManager?.RequestCreateAsync?()メソッド

public keyを取得する: KeyCredential?.RetrievePublicKey?()メソッド

attestationを取得する: KeyCredential?.GetAttestationAsync?()メソッド

上記の情報をサーバに飛ばして登録する。

認証

上記のKeyCredentialManager.OpenAsyncの結果が、

if (res.Status == KeyCredentialStatus.Success)
{
  ・・・

の場合、

KeyCredentialManager?.RequestSignAsync?()メソッド

登録後、PIN や 生体認証を使って、challengeにデジタル署名 (RequestSignAsync?) する。

var openKeyResult = await KeyCredentialManager.OpenAsync(AccountId);
if (openKeyResult.Status == KeyCredentialStatus.Success)
{
    var userKey = openKeyResult.Credential;
    var publicKey = userKey.RetrievePublicKey();
    var signResult = await userKey.RequestSignAsync(message);
    if (signResult.Status == KeyCredentialStatus.Success)
    {
        return signResult.Result;
    }
    else if (signResult.Status == KeyCredentialStatus.UserPrefersPassword)
    {
    }
}

上記の情報をサーバに飛ばして認証する。

こちら

その他

UserConsentVerifier?.RequestVerificationAsync?()メソッド

ある特定の箇所で 生体認証を呼び出してOKかNOか確認したい場合

if (await UserConsentVerifier.CheckAvailabilityAsync() == 
UserConsentVerifierAvailability.Available)
{
    UserConsentVerificationResult res =
        await UserConsentVerifier.RequestVerificationAsync(
            "This is sensitive operation ! Please authenticate again.");
            
    if(res == UserConsentVerificationResult.Verified)
    {
      // some important action …
    }
}

KeyCredentialManager?.DeleteAsync?()メソッド

private keyを削除する。

await KeyCredentialManager.DeleteAsync("keyName");

サーバ実装

サンプルのデータベース スキーマ

User

UserKeys?

処理

登録

UserKeys?レコードを追加。

認証

using (RSACng pubKey = new RSACng(publicKey))
{
   retval = pubKey.VerifyData(
                originalChallenge, responseSignature,
                HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); 
}

参考

docs.microsoft.com

Microsoft/Windows-universal-samples


Tags: :認証基盤


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS