「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
if (await KeyCredentialManager.IsSupportedAsync() == false) { ・・・
当該ユーザ&アプリケーションのキーのストア&コンテナを開く。
// retrieve private key for sign KeyCredentialRetrievalResult res = await KeyCredentialManager.OpenAsync("keyName"); if (res.Status == KeyCredentialStatus.Success) { ・・・
if (res.Status == KeyCredentialStatus.NotFound) { ・・・
の場合、
// Create the credential // (Windows Hello is diplayed here !) KeyCredentialRetrievalResult createRes = await KeyCredentialManager.RequestCreateAsync("keyName", KeyCredentialCreationOption.ReplaceExisting); // if the status is success, retrieve the public key. if (createRes.Status == KeyCredentialStatus.Success) { ・・・public keyとattestationを取得する。 } else if( keyCreationResult.Status == KeyCredentialStatus.UserCanceled || keyCreationResult.Status == KeyCredentialStatus.UserPrefersPassword) { // Show error message to the user to get confirmation that user does not want to enroll. }
if (createRes.Status == KeyCredentialStatus.Success)
var userKey = keyCreationResult.Credential; var publicKey = userKey.RetrievePublicKey();
if (createRes.Status == KeyCredentialStatus.Success)
IBuffer keyAttestation = null; IBuffer certificateChain = null; bool keyAttesttionIncluded = false; bool keyAttestationCanBeRetrievedLAter = false; KeyCredentialAttestationResult keyAttestationResult = await userKey.GetAttestationAsync(); KeyCredentialAttestationStatus keyAttestationRetryType = 0; if (keyAttestationResult.Status == KeyCredentialAttestationStatus.Success) { keyAttestationIncluded = true; keyAttestation = keyAttestationResult.AttestationBuffer; certificateChain = keyAttestationResult.CertificateChainBuffer; } else if (keyAttestationResult.Status == KeyCredentialAttestationStatus.TemporaryFailure) { keyAttestationRetryType = KeyCredentialAttestationStatus.TemporaryFailure; keyAttestationCanBeRetrievedLater = true; } else if (keyAttestationResult.Status == KeyCredentialAttestationStatus.NotSupported) { keyAttestationRetryType = KeyCredentialAttestationStatus.NotSupported; keyAttestationCanBeRetrievedLAter = true; }
上記のKeyCredentialManager.OpenAsyncの結果が、
if (res.Status == KeyCredentialStatus.Success) { ・・・
の場合、
登録後、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) { } }
private keyを削除する。
await KeyCredentialManager.DeleteAsync("keyName");
UserKeys?レコードを追加。
using (RSACng pubKey = new RSACng(publicKey)) { retval = pubKey.VerifyData( originalChallenge, responseSignature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); }
Tags: :認証基盤