Complete the sign-in ends here | LoginHint is given, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: a login_hint: the password, with the passkey offered
- Ask for the password, with a passkey offered: the person types the password
- Verify the password: the password is right: the subject is fixed and pwd joins the amr
- Read the account the password proved: the account is read with every factor
- Apply the downgrade rule, then offer a passkey (rule 8): the strongest bound factor is proved, and no passkey is offered
|
Show the first set of recovery codes ends here | LoginHint is given, servesGet is true, hostedPages is true, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is true | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: a login_hint: the password, with the passkey offered
- Ask for the password, with a passkey offered: the person types the password
- Verify the password: the password is right: the subject is fixed and pwd joins the amr
- Read the account the password proved: the account is read with every factor
- Apply the downgrade rule, then offer a passkey (rule 8): a password-only sign-in on the hosted pages: a passkey is offered
- Start, or keep, the transaction's registration ceremony: the ceremony is held
- Offer a passkey: the person creates a passkey
- Take the ceremony and verify the new passkey: the new passkey is verified, and the transaction holds it until it is bound
- Ask what the binding still needs: the binding may go ahead
- Bind the passkey to the account: the passkey is bound, and the user is told
|
Go on without a passkey step ends here | LoginHint is given, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is true, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: a login_hint: the password, with the passkey offered
- Ask for the password, with a passkey offered: the person types the password
- Verify the password: the password is right: the subject is fixed and pwd joins the amr
- Read the account the password proved: the account is read with every factor
- Apply the downgrade rule, then offer a passkey (rule 8): the transport does not serve webauthn_get, or every passkey of the account is disabled: no step the transport serves can complete the sign-in here
|
Ask for the password and the identifier ends here | LoginHint is absent, servesGet is false, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport does not serve webauthn_get: the preferred passkey gives way to the password
|
Go on with the password or the identifier ends here | LoginHint is absent, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: no login_hint: the discoverable passkey, with the password and the identifier offered
- Ask for a passkey, with the password and the identifier offered: the person answers the password or the identifier instead
|
Ask for the password again ends here | LoginHint is given, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: a login_hint: the password, with the passkey offered
- Ask for the password, with a passkey offered: the person types the password
- Verify the password: a wrong password, or none to verify: the password step again, the same for every account
|
Ask for the passkey again ends here | LoginHint is absent, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: no login_hint: the discoverable passkey, with the password and the identifier offered
- Ask for a passkey, with the password and the identifier offered: the person taps a passkey
- Reserve the assertion on the limiters: the round is reserved, and counted as a failure until it settles
- Take the ceremony and verify the assertion: no UV flag in the signed authenticator data: refused as invalid_credentials
|
Offer a passkey again ends here | LoginHint is given, servesGet is true, hostedPages is true, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: a login_hint: the password, with the passkey offered
- Ask for the password, with a passkey offered: the person types the password
- Verify the password: the password is right: the subject is fixed and pwd joins the amr
- Read the account the password proved: the account is read with every factor
- Apply the downgrade rule, then offer a passkey (rule 8): a password-only sign-in on the hosted pages: a passkey is offered
- Start, or keep, the transaction's registration ceremony: the ceremony is held
- Offer a passkey: the person creates a passkey
- Take the ceremony and verify the new passkey: refused as invalid_credentials, with a new ceremony
|
Refuse the round for a limit ends here | LoginHint is absent, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: no login_hint: the discoverable passkey, with the password and the identifier offered
- Ask for a passkey, with the password and the identifier offered: the person taps a passkey
- Reserve the assertion on the limiters: a delay or a hard limit refuses the round: nothing is verified
|
End the transaction ends here | LoginHint is given, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: a login_hint: the password, with the passkey offered
- Ask for the password, with a passkey offered: the person taps a passkey
- Reserve the assertion on the limiters: the round is reserved, and counted as a failure until it settles
- Take the ceremony and verify the assertion: another account's passkey: the transaction ends, audited as subject_mismatch
|
Refuse a malformed answer ends here | LoginHint is absent, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: no login_hint: the discoverable passkey, with the password and the identifier offered
- Ask for a passkey, with the password and the identifier offered: the answer is not a JSON assertion of at most 8192 characters: refused as invalid_answer
|
Refuse the round while a store is down ends here | LoginHint is absent, servesGet is true, hostedPages is false, the limiters let the round through, a passkey of the realm, not disabled, signed this round's challenge for the realm's RP ID from an allowed origin, with user presence and user verification, the transaction names no account yet, or the passkey is that account's, accountEnabled is false, password is right, passkeyBound is false, passkeyUsable is false, at most 5 minutes, a new passkey for this round's challenge and the realm's RP ID, from an allowed origin, discoverable, with user verification, an allowed algorithm and attestation "none", mailboxProved is false | - Choose the first response (rules 6 and 7): the transport serves webauthn_get
- Start, or keep, the transaction's assertion ceremony: it fails, because the challenge store fails; nothing is offered
|