webauthn-json.jswebauthn-json-Bibliothek (ein leichtgewichtiger clientseitiger WebAuthn-Wrapper), angepasst für die Verwendung im U2F/FIDO2-Authentifizierungsablauf von ProjectForge. Diese Bibliothek vereinfacht die Web Authentication API, indem sie die Konvertierung zwischen den nativen ArrayBuffer-basierten Credential-Objekten des Browsers und ihren JSON-serialisierbaren Darstellungen übernimmt – eine entscheidende Brücke, da WebAuthn-Credentials binäre Puffer verwenden, die JSON.stringify nicht überstehen. Die Datei bündelt einen Base64url-Codec, einen rekursiven schemagesteuerten Typkonverter und ein umfassendes Typschema, das die Formen von PublicKeyCredentialCreationOptions und PublicKeyCredentialRequestOptions definiert.
Die Datei enthält vier konzeptionelle Module, die ursprünglich aus dem npm-Paket webauthn-json stammen:
Base64url-Codec — base64urlToBuffer und bufferToBase64url konvertieren zwischen ArrayBuffer-Instanzen und URL-sicheren Base64-Zeichenfolgen. Da WebAuthn rawId, challenge und user.id binäre ArrayBuffer-Werte sind, müssen sie für die JSON-Übertragung an den Server als Base64url-Zeichenfolgen codiert werden.
Rekursiver Schema-Konverter — Die convert-Funktion ist die Kernlogik. Sie durchläuft einen Schema-Baum mit drei Knotentypen: "copy" (unverändert durchreichen), "convert" (die Transformationsfunktion anwenden, z. B. Base64url-Codierung) und Object/Array (rekursiv in Kinder absteigen). Schemafelder können auch deriveFn-Hooks deklarieren, die Werte aus der Eingabe berechnen, sowie required/optional-Flags für die Validierung.
Schema-Definitionen — Deklariert als einfache JS-Objekte: credentialCreationOptions, publicKeyCredentialWithAttestation (für die Registrierung), credentialRequestOptions und publicKeyCredentialWithAssertion (für die Authentifizierung). Jedes Schema gibt an, welche Felder kopiert, konvertiert, abgeleitet oder optional sind.
Öffentliche API — Vier Funktionen: create(requestJSON) ruft navigator.credentials.create() mit konvertierten Optionen auf; get(requestJSON) ruft navigator.credentials.get() auf; schema exportiert die Schema-Definitionen; supported() erkennt die Verfügbarkeit von WebAuthn.
Diese Datei bietet den übergeordneten, schemagesteuerten Ansatz. Die begleitende Datei webauthn.js (Datei #2762) bietet eine niedrigere, manuell geschriebene Alternative, die von den eigentlichen Authentifizierungskomponenten von ProjectForge verwendet wird. Beide existieren im Codebestand, da die WebAuthn-Integration über mehrere Ansätze erkundet wurde – den eingebundenen Bibliotheksansatz und den manuell erstellten Ansatz – bevor man sich für die benutzerdefinierte Implementierung in webauthn.js entschied.
| Commit | Was geändert wurde |
|---|---|
5865c2cd1 |
Die gesamte 190-zeilige Datei webauthn-json.js als einzelner Commit hinzugefügt. Dies war die erste WebAuthn-Arbeit in Bearbeitung: Die eingebundene webauthn-json-Bibliothek wurde als Referenzimplementierung eingebracht, während das Team die clientseitige WebAuthn-Integration erkundete. Die Datei enthält oben ein eslint-disable, was darauf hinweist, dass sie als externer Code behandelt wurde, der nicht den Linting-Regeln des Projekts unterliegt. |