User Passkey Assertion Failed
user.passkey.assertion_failed event is triggered when a WebAuthn assertion ceremony fails to verify. Useful for brute-force detection, cloned-authenticator monitoring, and operational dashboards that surface unsuccessful passkey attempts.
Failure reasons
Thereason field identifies the precise rule that failed. It is one of the following values:
Source
Thesource field distinguishes which ceremony failed:
Best-effort fields
user_id, session_id, and credential_id are all populated when known and omitted otherwise. The primary-factor login path can fail before the user is even resolved (e.g. reason: token_invalid), in which case user_id is absent. credential_id is populated only once the WebAuthn library has matched a credential — earlier failures leave it empty.
Event payload
Emitted on any failed passkey assertion, during either step-up or primary-factor login. user_id, session_id and credential_id are best-effort: the login path can fail before the user is resolved, so they may be absent.
Typed failure reason. See the event page for the full table.
invalid_assertion, sign_count_replay, token_invalid, no_credentials Distinguishes the step-up assertion path from the primary-factor login path.
step_up, login "2025-03-15T10:30:00Z"
Best-effort. Empty on early failures that happen before the
user is resolved (e.g. reason: token_invalid on the
primary-factor login path).
"usr_01jqebhswje1ka1z7ahr9rfsgt"
Best-effort. Empty on the primary-factor login path (no session exists yet) and on step-up failures that happen before the session context is loaded.
"ses_01jr0z5w2seq998trz7ftbb9rj"
Best-effort. Populated when the WebAuthn library has matched
a credential against the user; empty when the failure
happened earlier (e.g. reason: token_invalid,
reason: invalid_assertion on parse).
"XKv4eJk7mGmJYI4r-hZxxBg"
"123e4567-e89b-12d3-a456-426614174000"