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

目次

概要

クライアント実装

共通

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

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

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

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

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

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

登録

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)
    {
    }
}

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

こちら

その他

KeyCredentialManager?.DeleteAsync?()メソッド

private keyを削除する。

await KeyCredentialManager.DeleteAsync("keyName");

サーバ実装

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

処理

登録

UserKeys?レコードを追加。

認証

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

参考


Tags: :認証基盤


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