WebAuthn passkey registration fails on Android with origin validation error in 1.69.2
-
After upgrading FusionAuth from 1.55.x to 1.69.2, WebAuthn passkey registration is failing for a native Android application using Credential Manager.
Setup
- FusionAuth Server: 1.69.2
- WebAuthn workflow:
reauthentication - Relying Party ID: a web domain (e.g.,
dashboard.example.com) - Android implementation: Credential Manager API
- Digital Asset Links configured correctly between the web domain and Android app
The Problem
When completing registration via
POST /api/webauthn/register/complete, FusionAuth returns HTTP 400:{ "statusCode": 400, "exception": { "fieldErrors": { "origin": [ { "code": "[invalid]origin", "message": "The [origin] property is not valid. The provided value must match the value returned by the authenticator. Expected [android:apk-key-hash:<certificate-hash>] but found [dashboard.example.com]." } ] } } }The Android Credential Manager produces an origin in the
clientDataJSONwith the format:android:apk-key-hash:<base64url-sha256-of-signing-certificate>This is the standard Android format and cannot be modified by the application. FusionAuth 1.69.2 appears to validate this origin against the web RP domain and rejects it.
What Changed
Before 1.69.0, the implementation supplied top-level
originandrpIdfields when completing registration. According to the current documentation, these fields are deprecated and ignored starting with 1.69.0. The new implementation now passes only:await fusionAuthClient.completeWebAuthnRegistration({ userId, credential, });FusionAuth now reads the origin directly from the signed
clientDataJSONand validates it strictly. While this is correct from a security perspective, it doesn't recognize the Android APK hash format as a valid origin associated with the configured web RP through Digital Asset Links.Questions
- Does FusionAuth 1.69.2 support passkey registration and authentication initiated directly from a native Android application using Credential Manager?
- Does the new relying-party validation support origins in the
android:apk-key-hash:<certificate-hash>format? - Is there a tenant or application setting where trusted Android APK origins can be allowlisted?
- Is this a known limitation introduced by the WebAuthn security changes in 1.69.0?
- Is there a recommended workaround other than moving the ceremony into a browser/Custom Tab?
-
This is a confirmed bug in FusionAuth 1.69.2. The issue is in how FusionAuth validates the
originfromclientDataJSONduring WebAuthn registration.This has been fixed and will be released in the next release. Subscribe to the release announcements to be notified when that happens.
-
D dan has marked this topic as solved
-
D dan moved this topic from Staged