FIDO2 Authenticator allow-listing
Description
Configuring an allow list allows you to restrict FIDO2 authenticators for the registration and authentication ceremonies.
This feature is useful if you want to limit the FIDO2 security keys to a specific set of keys from a specific vendor.
Prerequisites
Allow-listing is based on the Authenticator Attestation Global Unique Identifier (AAGUID) as well as the Attestation root certificate of the authenticator.
This poses requirements regarding the Attestation types which can be used. Those not containing an X509 certificate
cannot be used for allow-listing, therefore attestation type none
and self
are not allowed.
In other terms this means that Attestation formats None
and Packed
(using self
attestation type) are not allowed. Other requirement in this area that the attestation is actually sent by the client which is configured by attestation
element of the Registration options service request (Also known as Attestation Conveyance Preference). The attestation option none
will cause the client to not transmit the attestation, indirect
has the freedom to alter the attestation for anonymization which makes the authenticator non-verifiable. Therefore direct
is needed.
In case of the Authentication ceremony the attestation for validation is taken from the nevisIdm FIDO2 credential which was stored during the Registration ceremony. This is required as in case of Authentication the attestation is no longer sent by the client.
- The Registration options service
attestation
attribute must be set todirect
. - The authenticators supported attestation format must be
Basic
orAttCa
. - Passkeys are not supported as they don't provide attestation.
Using FIDO2 Authenticator allow-listing
If you're an integrator wanting to use the FIDO2 allow-listing feature you'll generally have to execute the following steps:
Download the latest FIDO Alliance Metadata BLOB from the official FIDO Alliance Metadata Service.
Decode the JWT blob with tools of your choice. For example with the following bash function using the JQ utility:
JWT Decode functionjwt-decode() {
jq -R 'split(".") |.[0:2] | map(gsub("-"; "+") | gsub("_"; "/") | gsub("%3D"; "=") | @base64d) | map(fromjson)' <<< $1
}Example usagejwt-decode `cat blob.jwt` > fido-metadata.json
Extract the metadata entries of your authenticators to a new JSON file. You can "strip out"/simplify the entry as only the
"aaguid"
and"attestationRootCertificates"
are strictly required. We recommend keeping the"description"
as well to easier distinguish the metadata records.Provide the JSON file as configuration option of the nevisFIDO component in the
fido2.metadata.path
property and enable the allow-listing by settingfido2.metadata.allow-listing-enabled
totrue
. This can be done in the FIDO2 Instance pattern. Don't forget to restart/redeploy the nevisFIDO instance.In the FIDO2 onboarding pattern set the Attestation to
direct
.