EN · DE · RU · FR · ES

#2761: webauthn-json.js

projectforge-webapp/src/utilities/webauthn-json.js Biblioteca WebAuthn de terceros (vendida) · projectforge-webapp/src/utilities/webauthn-json.js 190 líneas · 179 código · 7 comentarios · 4 en blanco
Una copia vendida de la biblioteca webauthn-json (un envoltorio ligero de WebAuthn del lado del cliente) adaptada para su uso en el flujo de autenticación U2F/FIDO2 de ProjectForge. Esta biblioteca simplifica la API de autenticación web al manejar la conversión entre los objetos de credencial nativos basados en ArrayBuffer del navegador y sus representaciones serializables en JSON, un puente crítico ya que las credenciales WebAuthn utilizan búferes binarios que no sobreviven a JSON.stringify. El archivo incluye un códec base64url, un convertidor de tipos recursivo basado en esquemas y un esquema de tipos completo que define las formas de PublicKeyCredentialCreationOptions y PublicKeyCredentialRequestOptions.

Arquitectura

Estructura del módulo (empaquetado como un solo archivo)

El archivo incluye cuatro módulos conceptuales originalmente del paquete npm webauthn-json:

Códec Base64urlbase64urlToBuffer y bufferToBase64url convierten entre instancias de ArrayBuffer y cadenas base64 seguras para URL. Dado que rawId, challenge y user.id de WebAuthn son valores binarios ArrayBuffer, deben codificarse como cadenas base64url para la transmisión JSON al servidor.

Convertidor de esquema recursivo — La función convert es el motor. Recorre un árbol de esquemas con tres tipos de nodos: "copy" (pasar sin cambios), "convert" (aplicar la función de transformación, por ejemplo, codificación base64url) y Object/Array (recurrir en los hijos). Los campos del esquema también pueden declarar hooks deriveFn que calculan valores a partir de la entrada, y banderas required/optional para validación.

Definiciones de esquema — Declaradas como objetos JS simples: credentialCreationOptions, publicKeyCredentialWithAttestation (para registro), credentialRequestOptions y publicKeyCredentialWithAssertion (para autenticación). Cada esquema especifica qué campos se copian, convierten, derivan u son opcionales.

API pública — Cuatro funciones: create(requestJSON) llama a navigator.credentials.create() con opciones convertidas; get(requestJSON) llama a navigator.credentials.get(); schema exporta las definiciones del esquema; supported() detecta la disponibilidad de WebAuthn.

Relación con webauthn.js

Este archivo proporciona el enfoque de alto nivel basado en esquemas. El archivo complementario webauthn.js (archivo #2762) proporciona una alternativa de bajo nivel escrita a mano que utilizan los componentes de autenticación reales de ProjectForge. Ambos existen en la base de código porque la integración de WebAuthn se exploró a través de múltiples enfoques — el enfoque de biblioteca vendida y el enfoque artesanal — antes de decidirse por la implementación personalizada en webauthn.js.

Historial de Git

CommitQué cambió
5865c2cd1Se agregó todo el archivo webauthn-json.js de 190 líneas como un solo commit. Este fue el trabajo inicial en progreso de WebAuthn: la biblioteca vendida webauthn-json se incorporó como una implementación de referencia mientras el equipo exploraba la integración de WebAuthn del lado del cliente. El archivo tiene eslint-disable en la parte superior, lo que indica que se trató como código externo no sujeto a las reglas de linting del proyecto.