EN · DE · RU · FR · ES

#2761 : webauthn-json.js

projectforge-webapp/src/utilities/webauthn-json.js Bibliothèque WebAuthn tierce (vendue) · projectforge-webapp/src/utilities/webauthn-json.js 190 lignes · 179 lignes de code · 7 commentaires · 4 lignes vides
Une copie vendue de la bibliothèque webauthn-json (un wrapper WebAuthn côté client léger) adaptée pour être utilisée dans le flux d'authentification U2F/FIDO2 de ProjectForge. Cette bibliothèque simplifie l'API Web Authentication en gérant la conversion entre les objets d'identification natifs basés sur ArrayBuffer du navigateur et leurs représentations sérialisables en JSON — un pont essentiel car les identifiants WebAuthn utilisent des tampons binaires qui ne survivent pas à JSON.stringify. Le fichier regroupe un codec base64url, un convertisseur de types récursif piloté par schéma et un schéma de types complet définissant les formes de PublicKeyCredentialCreationOptions et PublicKeyCredentialRequestOptions.

Architecture

Structure du module (regroupé en un seul fichier)

Le fichier intègre quatre modules conceptuels provenant à l'origine du package npm webauthn-json :

Codec Base64urlbase64urlToBuffer et bufferToBase64url convertissent entre les instances ArrayBuffer et les chaînes base64 sûres pour les URL. Étant donné que rawId, challenge et user.id de WebAuthn sont des valeurs binaires ArrayBuffer, elles doivent être encodées sous forme de chaînes base64url pour la transmission JSON au serveur.

Convertisseur de schéma récursif — La fonction convert est le moteur. Elle parcourt un arbre de schéma avec trois types de nœuds : "copy" (transmettre tel quel), "convert" (appliquer la fonction de transformation, par exemple l'encodage base64url) et Object/Array (récurrer dans les enfants). Les champs du schéma peuvent également déclarer des hooks deriveFn qui calculent des valeurs à partir de l'entrée, ainsi que des indicateurs required/optional pour la validation.

Définitions de schéma — Déclarées comme des objets JS simples : credentialCreationOptions, publicKeyCredentialWithAttestation (pour l'enregistrement), credentialRequestOptions et publicKeyCredentialWithAssertion (pour l'authentification). Chaque schéma spécifie quels champs sont copiés, convertis, dérivés ou facultatifs.

API publique — Quatre fonctions : create(requestJSON) appelle navigator.credentials.create() avec les options converties ; get(requestJSON) appelle navigator.credentials.get() ; schema exporte les définitions de schéma ; supported() détecte la disponibilité de WebAuthn.

Relation avec webauthn.js

Ce fichier fournit l'approche de haut niveau pilotée par schéma. Le fichier compagnon webauthn.js (fichier #2762) fournit une alternative de bas niveau, écrite à la main, que les composants d'authentification réels de ProjectForge utilisent. Les deux existent dans la base de code car l'intégration WebAuthn a été explorée via plusieurs approches — l'approche de la bibliothèque vendue et l'approche artisanale — avant de se fixer sur l'implémentation personnalisée dans webauthn.js.

Historique Git

CommitCe qui a changé
5865c2cd1Ajout du fichier entier webauthn-json.js de 190 lignes en un seul commit. Il s'agissait du premier travail en cours sur WebAuthn : la bibliothèque vendue webauthn-json a été introduite comme implémentation de référence pendant que l'équipe explorait l'intégration de WebAuthn côté client. Le fichier comporte eslint-disable en haut, ce qui indique qu'il a été traité comme du code externe non soumis aux règles de linting du projet.