EN · DE · RU · FR · ES

#2761: webauthn-json.js

projectforge-webapp/src/utilities/webauthn-json.js Сторонняя библиотека WebAuthn (включена в проект) · projectforge-webapp/src/utilities/webauthn-json.js 190 строк · 179 кода · 7 комментариев · 4 пустых
Включённая в проект копия библиотеки webauthn-json (лёгкая клиентская обёртка WebAuthn), адаптированная для использования в потоке аутентификации U2F/FIDO2 в ProjectForge. Эта библиотека упрощает Web Authentication API, обрабатывая преобразование между нативными объектами учётных данных на основе ArrayBuffer и их JSON-сериализуемыми представлениями — критически важный мост, поскольку учётные данные WebAuthn используют бинарные буферы, которые не выживают при JSON.stringify. Файл включает в себя кодировщик base64url, рекурсивный преобразователь типов на основе схемы и всеобъемлющую схему типов, определяющую формы PublicKeyCredentialCreationOptions и PublicKeyCredentialRequestOptions.

Архитектура

Структура модуля (объединён в один файл)

Файл включает в себя четыре концептуальных модуля из npm-пакета webauthn-json:

Кодировщик Base64urlbase64urlToBuffer и 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

Этот файл предоставляет высокоуровневый подход на основе схем. Сопутствующий файл webauthn.js (файл #2762) предоставляет низкоуровневую, написанную вручную альтернативу, которую используют фактические компоненты аутентификации ProjectForge. Оба существуют в кодовой базе, поскольку интеграция WebAuthn исследовалась через несколько подходов — подход с включённой библиотекой и подход с ручной реализацией — прежде чем остановиться на пользовательской реализации в webauthn.js.

История Git

КоммитЧто изменилось
5865c2cd1Добавлен весь файл webauthn-json.js из 190 строк одним коммитом. Это была первоначальная работа над WebAuthn: включённая библиотека webauthn-json была добавлена в качестве эталонной реализации, пока команда изучала клиентскую интеграцию WebAuthn. В начале файла указано eslint-disable, что означает, что он рассматривался как внешний код, не подлежащий правилам линтинга проекта.