This article will describe the FIDO2 authenticator. I will assume you have created a new ASP.NET Core 3.1
Razor Pages project and have reviewed the previous articles of the series. I won't use Identity or Individual
User Accounts. See
Tutorial: Get started with Razor Pages in ASP.NET Core.
The project implements Bootstrap Native v3 with a jQuery option. The Message Modal requires jQuery or Bootstrap Native.
Access to the research project source code may be purchased on KenHaggerty.Com at
Manage > Assets.
I will publish the FIDO Utilities Project at
until I publish the Users Without Passwords Project.
I enjoy writing these articles. It often enhances and clarifies my coding. The research
project is a result of a lot of refactoring and hopefully provides logical segues for the articles.
Thank you for supporting my efforts.
I started my FIDO research over 8 months ago when I purchased a Security Key NFC by Yubico. The first
time I attempted to implement it with Windows 10 sign-in, the warnings about adding a second key for backup
scared me away. Now, Windows 10 account sign-in does not support security keys but allows you to add a key
for FIDO2. See Settings > Accounts > Sign-in options > Security Keys. My laptop has a fingerprint scanner
which is supported by Windows 10 Hello. Windows 10 Hello is certified as a FIDO2 authenticator for
passwordless sign-in on the web. Windows 10 Hello also supports a PIN and face recognition with a
compatible IR camera. See
MSDocs - Windows Hello
I am using the Users Without Passwords Project to do the research for this article. A FIDO2 web application
needs to support multiple authenticators in the event the first one is lost, stolen, or broken. When the credential
is created, the authenticator returns a response with ClientDataJson and AttestationObject. First you decode the
ClientDataJson to verify the type (create or get), the challenge and Relying Party's origin. Then the attestationObject
is cast as a CBOR object which produces a byte array called authData. The authData byte array is sliced, diced, and
hashed to extract and validate properties. The most important are the CredentialId and the PublicKey.
I read somewhere external authenticators support the ES256 algorithm and Windows Hello supports the RS256
algorithm. Typically, the attestation signature is the concatenation of the authenticator data and the client data hash.
I have developed a crypto service class with algorithm models for the Users Without Passwords Project.
I have purchased a second Security Key and updated the YubiKey Manager. You have to run the manager as
an administrator to display the firmware version and update the PIN or Reset (restore defaults) for one key at a time.
The manager also allows you to enable or disable the interfaces for the key.
The early FIDO authenticators required a Metadata Service to validate security certificates and acquire make and
model information. FIDO2 authenticators employ a packed format for encryption which doesn't require a certificate
lookup for validation. You can request an AaGuid (Authenticator Attestation GUID) from FIDO2 authenticators which
can be used with Metadata Services to acquire make, model and firmware. You can use this information to restrict
access to specific authenticators. If you request the AaGuid, you will be prompted by the client to allow the request.
I decided to spend some time on FIDO2 utilities with this project so I can focus more on authenticators and users
with the Users Without Passwords Project where I will cover authenticators in more depth.
I added the AES Cipher article link.
I updated the article to announce support for Bootstrap Native v3.
I enjoy writing these articles. It often enhances and clarifies my coding. I create research projects
to analyze and compose the articles before I publish them. The projects are the result of
a lot of refactoring and are provided with a MIT license. Registered users can download the
projects from Manage > Assets.