webauthn-json.jswebauthn-json (лёгкая клиентская обёртка WebAuthn), адаптированная для использования в потоке аутентификации U2F/FIDO2 в ProjectForge. Эта библиотека упрощает Web Authentication API, обрабатывая преобразование между нативными объектами учётных данных на основе ArrayBuffer и их JSON-сериализуемыми представлениями — критически важный мост, поскольку учётные данные WebAuthn используют бинарные буферы, которые не выживают при JSON.stringify. Файл включает в себя кодировщик base64url, рекурсивный преобразователь типов на основе схемы и всеобъемлющую схему типов, определяющую формы PublicKeyCredentialCreationOptions и PublicKeyCredentialRequestOptions.Файл включает в себя четыре концептуальных модуля из npm-пакета webauthn-json:
Кодировщик Base64url — base64urlToBuffer и bufferToBase64url преобразуют экземпляры ArrayBuffer в URL-безопасные строки base64 и обратно. Поскольку rawId, challenge и user.id в WebAuthn являются бинарными значениями ArrayBuffer, они должны быть закодированы как строки base64url для JSON-передачи на сервер.
Рекурсивный преобразователь схем — Функция convert является движком. Она обходит дерево схемы с тремя типами узлов: "copy" (передать без изменений), "convert" (применить функцию преобразования, например, кодирование base64url) и Object/Array (рекурсивно обработать дочерние элементы). Поля схемы также могут объявлять хуки deriveFn, которые вычисляют значения из входных данных, и флаги required/optional для валидации.
Определения схем — Объявлены как простые JS-объекты: credentialCreationOptions, publicKeyCredentialWithAttestation (для регистрации), credentialRequestOptions и publicKeyCredentialWithAssertion (для аутентификации). Каждая схема определяет, какие поля копируются, преобразуются, выводятся или являются необязательными.
Публичный API — Четыре функции: create(requestJSON) вызывает navigator.credentials.create() с преобразованными параметрами; get(requestJSON) вызывает navigator.credentials.get(); schema экспортирует определения схем; supported() определяет доступность WebAuthn.
Этот файл предоставляет высокоуровневый подход на основе схем. Сопутствующий файл webauthn.js (файл #2762) предоставляет низкоуровневую, написанную вручную альтернативу, которую используют фактические компоненты аутентификации ProjectForge. Оба существуют в кодовой базе, поскольку интеграция WebAuthn исследовалась через несколько подходов — подход с включённой библиотекой и подход с ручной реализацией — прежде чем остановиться на пользовательской реализации в webauthn.js.
| Коммит | Что изменилось |
|---|---|
5865c2cd1 | Добавлен весь файл webauthn-json.js из 190 строк одним коммитом. Это была первоначальная работа над WebAuthn: включённая библиотека webauthn-json была добавлена в качестве эталонной реализации, пока команда изучала клиентскую интеграцию WebAuthn. В начале файла указано eslint-disable, что означает, что он рассматривался как внешний код, не подлежащий правилам линтинга проекта. |