public final class RelyingParty
extends java.lang.Object
This class has no mutable state. An instance of this class may therefore be thought of as a container for specialized versions (function closures) of these four operations rather than a stateful object.
| Modifier and Type | Class and Description |
|---|---|
static class |
RelyingParty.RelyingPartyBuilder |
| Modifier and Type | Method and Description |
|---|---|
static RelyingParty.RelyingPartyBuilder.MandatoryStages |
builder() |
boolean |
equals(java.lang.Object o) |
AssertionResult |
finishAssertion(FinishAssertionOptions finishAssertionOptions) |
RegistrationResult |
finishRegistration(FinishRegistrationOptions finishRegistrationOptions) |
@NonNull java.util.Optional<AppId> |
getAppId()
The extension input to set for the
appid and appidExclude extensions. |
@NonNull java.util.Optional<AttestationConveyancePreference> |
getAttestationConveyancePreference()
The argument for the
attestation
parameter in registration operations. |
@NonNull java.util.Optional<AttestationTrustSource> |
getAttestationTrustSource()
An
AttestationTrustSource instance to use for looking up trust roots for authenticator
attestation. |
@NonNull java.time.Clock |
getClock()
A
Clock which will be used to tell the current time while verifying attestation
certificate chains. |
@NonNull CredentialRepository |
getCredentialRepository()
An abstract database which can look up credentials, usernames and user handles from usernames,
user handles and credential IDs.
|
@NonNull RelyingPartyIdentity |
getIdentity()
The
RelyingPartyIdentity that will be set as the rp parameter when initiating registration
operations, and which AuthenticatorData.getRpIdHash() will be compared against. |
@NonNull java.util.Set<java.lang.String> |
getOrigins()
The allowed origins that returned authenticator responses will be compared against.
|
@NonNull java.util.List<PublicKeyCredentialParameters> |
getPreferredPubkeyParams()
The argument for the
pubKeyCredParams parameter in registration operations. |
int |
hashCode() |
boolean |
isAllowOriginPort()
If
true, the origin matching rule is relaxed to allow any port number. |
boolean |
isAllowOriginSubdomain()
If
true, the origin matching rule is relaxed to allow any subdomain, of any depth,
of the values of origins. |
boolean |
isAllowUntrustedAttestation()
If
false, finishRegistration will only allow registrations where the attestation signature can be linked
to a trusted attestation root. |
boolean |
isValidateSignatureCounter()
If
true, finishAssertion will
succeed only if the signature counter value in
the response is strictly greater than the stored signature counter value, or if both counters are exactly zero. |
AssertionRequest |
startAssertion(StartAssertionOptions startAssertionOptions) |
PublicKeyCredentialCreationOptions |
startRegistration(StartRegistrationOptions startRegistrationOptions) |
RelyingParty.RelyingPartyBuilder |
toBuilder() |
java.lang.String |
toString() |
public PublicKeyCredentialCreationOptions startRegistration(StartRegistrationOptions startRegistrationOptions)
public RegistrationResult finishRegistration(FinishRegistrationOptions finishRegistrationOptions) throws RegistrationFailedException
RegistrationFailedExceptionpublic AssertionRequest startAssertion(StartAssertionOptions startAssertionOptions)
public AssertionResult finishAssertion(FinishAssertionOptions finishAssertionOptions) throws AssertionFailedException
InvalidSignatureCountException - if validateSignatureCounter is
true, the signature count in the
response is less than or equal to the stored signature count, and at least one of the signature count values is nonzero.AssertionFailedException - if validation fails for any other reason.public static RelyingParty.RelyingPartyBuilder.MandatoryStages builder()
public RelyingParty.RelyingPartyBuilder toBuilder()
@NonNull public @NonNull RelyingPartyIdentity getIdentity()
RelyingPartyIdentity that will be set as the rp parameter when initiating registration
operations, and which AuthenticatorData.getRpIdHash() will be compared against. This is
a required parameter.
A successful registration or authentication operation requires AuthenticatorData.getRpIdHash() to exactly equal the SHA-256 hash of this member's id member. Alternatively, it may instead equal the SHA-256 hash
of appId if the latter is present.
@NonNull public @NonNull java.util.Set<java.lang.String> getOrigins()
The default is the set containing only the string
"https://" + .
getIdentity().getId()
If allowOriginPort and allowOriginSubdomain are both false
(the default), then a successful registration or authentication operation requires
CollectedClientData.getOrigin() to exactly equal one of these values.
If allowOriginPort is true
, then the above rule is relaxed to allow any port number in CollectedClientData.getOrigin(), regardless of any port specified.
If allowOriginSubdomain is
true, then the above rule is relaxed to allow any subdomain, of any depth, of any of
these values.
For either of the above relaxations to take effect, both the allowed origin and the client data origin must be valid URLs. Origins that are not valid URLs are matched only by exact string equality.
getIdentity()@NonNull public @NonNull CredentialRepository getCredentialRepository()
This is used to look up:
PublicKeyCredentialCreationOptions.getExcludeCredentials()
PublicKeyCredentialRequestOptions.getAllowCredentials()
@NonNull public @NonNull java.util.Optional<AppId> getAppId()
appid and appidExclude extensions.
You do not need this extension if you have not previously supported U2F. Its purpose is to make already-registered U2F credentials forward-compatible with the WebAuthn API. It is not needed for new registrations, even of U2F authenticators.
If this member is set, startAssertion will
automatically set the appid extension input, and finishAssertion will adjust its verification logic to
also accept this AppID as an alternative to the RP ID. Likewise, startRegistration(StartRegistrationOptions) startRegistration} will automatically set the
appidExclude extension input.
By default, this is not set.
@NonNull public @NonNull java.util.Optional<AttestationConveyancePreference> getAttestationConveyancePreference()
attestation
parameter in registration operations.
Unless your application has a concrete policy for authenticator attestation, it is recommended to leave this parameter undefined.
If you set this, you may want to explicitly set allowUntrustedAttestation and attestationTrustSource too.
By default, this is not set.
@NonNull public @NonNull java.util.Optional<AttestationTrustSource> getAttestationTrustSource()
AttestationTrustSource instance to use for looking up trust roots for authenticator
attestation. This matters only if getAttestationConveyancePreference() is non-empty
and not set to AttestationConveyancePreference.NONE.
By default, this is not set.
@NonNull public @NonNull java.util.List<PublicKeyCredentialParameters> getPreferredPubkeyParams()
pubKeyCredParams parameter in registration operations.
This is a list of acceptable public key algorithms and their parameters, ordered from most to least preferred.
The default is the following list, in order:
public boolean isAllowOriginPort()
true, the origin matching rule is relaxed to allow any port number.
The default is false.
Examples with
origins: ["https://example.org", "https://accounts.example.org", "https://acme.com:8443"]
allowOriginPort: false
Accepted:
https://example.org
https://accounts.example.org
https://acme.com:8443
Rejected:
https://example.org:8443
https://shop.example.org
https://acme.com
https://acme.com:9000
allowOriginPort: true
Accepted:
https://example.org
https://example.org:8443
https://accounts.example.org
https://acme.com
https://acme.com:8443
https://acme.com:9000
Rejected:
https://shop.example.org
public boolean isAllowOriginSubdomain()
true, the origin matching rule is relaxed to allow any subdomain, of any depth,
of the values of origins.
The default is false.
Examples with origins: ["https://example.org", "https://acme.com:8443"]
allowOriginSubdomain: false
Accepted:
https://example.org
https://acme.com:8443
Rejected:
https://example.org:8443
https://accounts.example.org
https://acme.com
https://eu.shop.acme.com:8443
allowOriginSubdomain: true
Accepted:
https://example.org
https://accounts.example.org
https://acme.com:8443
https://eu.shop.acme.com:8443
Rejected:
https://example.org:8443
https://acme.com
public boolean isAllowUntrustedAttestation()
false, finishRegistration will only allow registrations where the attestation signature can be linked
to a trusted attestation root. This excludes none attestation, and self attestation unless the
self attestation key is explicitly trusted.
Regardless of the value of this option, invalid attestation statements of supported formats
will always be rejected. For example, a "packed" attestation statement with an invalid
signature will be rejected even if this option is set to true.
The default is true.
public boolean isValidateSignatureCounter()
true, finishAssertion will
succeed only if the signature counter value in
the response is strictly greater than the stored signature counter value, or if both counters are exactly zero.
The default is true.
@NonNull public @NonNull java.time.Clock getClock()
Clock which will be used to tell the current time while verifying attestation
certificate chains.
This is intended primarily for testing, and relevant only if RelyingParty.RelyingPartyBuilder.attestationTrustSource(AttestationTrustSource) is set.
The default is Clock.systemUTC().
public boolean equals(java.lang.Object o)
equals in class java.lang.Objectpublic int hashCode()
hashCode in class java.lang.Objectpublic java.lang.String toString()
toString in class java.lang.Object