WebAuthn4J prüft Registrierungs- und Authentifizierungsantworten – Attestierungen in jedem Format, COSE-Schlüssel, Flags, Zähler und Signaturen – und überlässt das Erstellen der Optionen der Relying Party. Spring Security und Keycloak nutzen die Bibliothek intern. Version 0.31.11 hängt von Jackson 3 (tools.jackson.*) ab; das spielt eine Rolle, wenn deine Anwendung für ihr eigenes JSON noch com.fasterxml.jackson aus Jackson 2 verwendet. Außerdem trägt die API der Bibliothek die Annotationen @NotNull von JetBrains: Das Kompilieren gegen WebAuthn4J mit dem Einzeldatei-Launcher java scheiterte, bis org.jetbrains:annotations im Classpath lag.
Eine Standardrichtlinie für die Benutzerverifizierung, die du vergessen könntest, gibt es nicht: RegistrationParameters und AuthenticationParameters nehmen userVerificationRequired und userPresenceRequired als Pflichtargumente entgegen. Im Test bestanden eine Registrierung und eine Assertion mit nicht gesetztem UV-Flag die Prüfung, wenn false übergeben wurde, und scheiterten bei true mit UserNotVerifiedException. Halte den Wert konsistent mit dem userVerification, das du in den Optionen sendest, wie es das Beispiel zeigt.
Signaturen müssen ASN.1-DER sein: Eine rohe r‖s-Signatur mit 64 Byte in einer Assertion scheiterte mit BadSignatureException: Assertion signature is not valid., und eine DER-Signatur mit High-S bestand die Prüfung. Ein Zähler unter dem gespeicherten Wert lässt die Anmeldung mit MaliciousCounterValueException: Malicious counter value is detected. Cloned authenticators exist in parallel. scheitern, während ein Zähler, der immer 0 war, wie ihn synchronisierte Passkeys melden, die Prüfung besteht. Ed25519-Credentials funktionierten durchgängig, von der Registrierung bis zur Prüfung.
createNonStrictWebAuthnManager() akzeptiert jede Attestierung, ohne sie gegen Vertrauensanker zu prüfen. Das ist richtig, wenn du die Attestierung none anforderst, und falsch, wenn die Attestierung eine Richtlinienentscheidung ist; konfiguriere in diesem Fall Vertrauensanker und verwende einen strikten Manager.
Der WebAuthn-Inspektor dekodiert, was Browser senden, und der AAGUID-Lookup identifiziert Authenticator-Modelle für Attestierungsrichtlinien.