EN · DE · RU · FR · ES

#2761: webauthn-json.js

projectforge-webapp/src/utilities/webauthn-json.js Drittanbieter-WebAuthn-Bibliothek (eingebunden) · projectforge-webapp/src/utilities/webauthn-json.js 190 Zeilen · 179 Code · 7 Kommentare · 4 Leerzeilen
Eine eingebundene Kopie der webauthn-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.

Architektur

Modulstruktur (als einzelne Datei gebündelt)

Die Datei enthält vier konzeptionelle Module, die ursprünglich aus dem npm-Paket webauthn-json stammen:

Base64url-Codecbase64urlToBuffer 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.

Beziehung zu webauthn.js

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.

Git-Verlauf

CommitWas 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.