Class FidoMetadataService
- java.lang.Object
-
- com.yubico.fido.metadata.FidoMetadataService
-
- All Implemented Interfaces:
AttestationTrustSource
public final class FidoMetadataService extends java.lang.Object implements AttestationTrustSource
Utility for filtering and querying Fido Metadata Service BLOB entries.This class implements
AttestationTrustSource, so it can be configured as theattestationTrustSourcesetting inRelyingParty. This implementation always setsenableRevocationChecking(false), because the FIDO MDS has its own revocation procedures and not all attestation certificates provide CRLs; and always setspolicyTreeValidatorto accept any policy tree, because a Windows Hello attestation certificate is known to include a critical certificate policies extension.The metadata service may be configured with two stages of filters to select trusted authenticators. The first stage is the
prefiltersetting, which is executed once when theFidoMetadataServiceinstance is constructed. The second stage is thefiltersetting, which is executed whenever metadata or trust roots are to be looked up for a given authenticator. Any metadata entry that satisfies both filters will be considered trusted.Use the
builderto configure settings, then use thefindEntries(List, AAGUID)method or its overloads to retrieve metadata entries.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classFidoMetadataService.FidoMetadataServiceBuilderstatic classFidoMetadataService.FiltersPreconfigured filters and utilities for combining filters.-
Nested classes/interfaces inherited from interface com.yubico.webauthn.attestation.AttestationTrustSource
AttestationTrustSource.TrustRootsResult
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static FidoMetadataService.FidoMetadataServiceBuilder.Step1builder()java.util.Set<MetadataBLOBPayloadEntry>findEntries(@NonNull AAGUID aaguid)Find metadata entries matching the given AAGUID.java.util.Set<MetadataBLOBPayloadEntry>findEntries(@NonNull RegistrationResult registrationResult)Find metadata entries matching the credential represented byregistrationResult.java.util.Set<MetadataBLOBPayloadEntry>findEntries(@NonNull java.util.function.Predicate<MetadataBLOBPayloadEntry> filter)Retrieve metadata entries matching the given filter.java.util.Set<MetadataBLOBPayloadEntry>findEntries(@NonNull java.util.List<java.security.cert.X509Certificate> attestationCertificateChain)Alias offindEntries(attestationCertificateChain, Optional.empty()).java.util.Set<MetadataBLOBPayloadEntry>findEntries(@NonNull java.util.List<java.security.cert.X509Certificate> attestationCertificateChain, @NonNull AAGUID aaguid)Alias offindEntries(attestationCertificateChain, Optional.of(aaguid)).java.util.Set<MetadataBLOBPayloadEntry>findEntries(@NonNull java.util.List<java.security.cert.X509Certificate> attestationCertificateChain, @NonNull java.util.Optional<AAGUID> aaguid)Look up metadata entries matching a given attestation certificate chain or AAGUID.AttestationTrustSource.TrustRootsResultfindTrustRoots(java.util.List<java.security.cert.X509Certificate> attestationCertificateChain, java.util.Optional<ByteArray> aaguid)
-
-
-
Method Detail
-
builder
public static FidoMetadataService.FidoMetadataServiceBuilder.Step1 builder()
-
findEntries
public java.util.Set<MetadataBLOBPayloadEntry> findEntries(@NonNull @NonNull java.util.List<java.security.cert.X509Certificate> attestationCertificateChain, @NonNull @NonNull java.util.Optional<AAGUID> aaguid)
Look up metadata entries matching a given attestation certificate chain or AAGUID.- Parameters:
attestationCertificateChain- an attestation certificate chain, presumably from a WebAuthn attestation statement.aaguid- the AAGUID of the authenticator to look up, if available.- Returns:
- All metadata entries which satisfy ALL of the following:
- It satisfies the
prefilter. - It satisfies AT LEAST ONE of the following:
_aaguidis present and equals theAAGUIDof the metadata entry._aaguidis present and equals theAAGUIDof themetadata statement, if any, in the metadata entry.- The certificate subject key identifier of any certificate in
attestationCertificateChainmatches any element ofattestationCertificateKeyIdentifiersin the metadata entry. - The certificate subject key identifier of any certificate in
attestationCertificateChainmatches any element ofattestationCertificateKeyIdentifiersin themetadata statement, if any, in the metadata entry.
- It satisfies the
filtertogether withattestationCertificateChainand_aaguid.
_aaguidis the first of the following that ispresentand notzero, or empty otherwise:- The
aaguidargument. - The value of the X.509 extension with OID 1.3.6.1.4.1.45724.1.1.4
(id-fido-gen-ce-aaguid), if any, in the first certificate in
attestationCertificateChain, if any.
- It satisfies the
- See Also:
findEntries(List),findEntries(List, AAGUID)
-
findEntries
public java.util.Set<MetadataBLOBPayloadEntry> findEntries(@NonNull @NonNull java.util.List<java.security.cert.X509Certificate> attestationCertificateChain)
Alias offindEntries(attestationCertificateChain, Optional.empty()).- See Also:
findEntries(List, Optional)
-
findEntries
public java.util.Set<MetadataBLOBPayloadEntry> findEntries(@NonNull @NonNull java.util.List<java.security.cert.X509Certificate> attestationCertificateChain, @NonNull @NonNull AAGUID aaguid)
Alias offindEntries(attestationCertificateChain, Optional.of(aaguid)).- See Also:
findEntries(List, Optional)
-
findEntries
public java.util.Set<MetadataBLOBPayloadEntry> findEntries(@NonNull @NonNull RegistrationResult registrationResult)
Find metadata entries matching the credential represented byregistrationResult.This is an alias of:
registrationResult.getAttestationTrustPath() .map(atp -> this.findEntries(atp, new AAGUID(registrationResult.getAaguid()))) .orElseGet(Collections::emptySet)
- See Also:
findEntries(List, Optional)
-
findEntries
public java.util.Set<MetadataBLOBPayloadEntry> findEntries(@NonNull @NonNull AAGUID aaguid)
Find metadata entries matching the given AAGUID.- See Also:
findEntries(List, Optional)
-
findEntries
public java.util.Set<MetadataBLOBPayloadEntry> findEntries(@NonNull @NonNull java.util.function.Predicate<MetadataBLOBPayloadEntry> filter)
Retrieve metadata entries matching the given filter.Note: The result MAY include fewer results than the number of times the
filterreturnedtrue, because of possible duplication in the underlying data store.- Parameters:
filter- aPredicatewhich returnstruefor metadata entries to include in the result.- Returns:
- All metadata entries which satisfy the
prefilterAND for which thefilterreturnstrue. - See Also:
findEntries(List, Optional)
-
findTrustRoots
public AttestationTrustSource.TrustRootsResult findTrustRoots(java.util.List<java.security.cert.X509Certificate> attestationCertificateChain, java.util.Optional<ByteArray> aaguid)
- Specified by:
findTrustRootsin interfaceAttestationTrustSource
-
-