Webauthn – Как проверить/проверить возвращенные данные аутентификации регистрации с помощью React + Node.js

Пытаюсь реализовать базовый поток веб-аутентификации в приложении React/Node, следуя официальному руководству Webauthn. Мой вызов navigator.credentials.create() работает, и я успешно генерирую объект PublicKeyCredential для данного пользователя; однако я не эксперт по аутентификации и не знаю, что делать дальше и как мне «проверить» возвращенные данные аутентификации?

После успешного завершения API регистрации у меня есть возвращенные clientDataJSON и attestationObject (среди других данных). Я могу проверить, что challenge в данных клиента соответствует исходному заданию из первоначального запроса. Кроме того, мой декодированный объект аттестации выглядит следующим образом:

{
  fmt: 'none',
  attStmt: {},
  authData: <Buffer 49 96 0d e5 88 0e 8c 68 74 34 17 0f 64 76 60 5b 8f e4 ae b9 a2 86 32 c7 99 5c f3 ba 83 1d 97 63 5d 00 00 00 00 fb fc 30 07 15 4e 4e cc 8c 0b 6e 02 05 ... 102 more bytes>
}

Затем в руководстве показано, как анализировать возвращенные данные аутентификации, и, конечно же, я могу анализировать байты открытого ключа, получая такой объект, как:

{
    1: 2,
    3: -7,
    -1: 1,
    -2: Uint8Array(32) ...
    -3: Uint8Array(32) ...
}

Однако что мне теперь делать? В руководстве говорится: «Если процесс проверки пройдет успешно, сервер сохранит publicKeyBytes и credentialId в базе данных…»

Что означает «если процесс проверки прошел успешно», нужно ли мне что-то подписывать, используя открытый ключ, чтобы проверить его действительность, или какую-то другую криптографическую проверку?? (Извините, но я относительный авторизатор n00b)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
169
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

https://webauthn.guide — отличный сайт, но, поскольку вы зашли так далеко, я рекомендую прочитать спецификацию WebAuthn. Здесь более подробно рассматривается, как RP должен обрабатывать ответы на регистрацию и аутентификацию:

https://w3c.github.io/webauthn/#sctn-registering-a-new-credential

В вашем случае вы находитесь на этапе 12, на котором анализируются различные флаги внутри authData. На шаге 21 вы начнете оценивать значение attStmt на основе значения fmt. В вашем примере значение fmt равно "none", так что делать особо не придется. Предположим, что проверка аттестации «завершена успешно» на последующих этапах, и все готово.

...нужно ли мне что-то подписать, используя открытый ключ, чтобы убедиться в его правильности, или какую-то другую криптографическую проверку??

Интересный факт: при возврате "none" аттестаций подпись отсутствует, поэтому в этом конкретном сценарии вы не будете ни для чего использовать открытый ключ во время регистрации!

Большое спасибо за ссылку и объяснение. Итак, поскольку мой формат аттестации «нет» без сопроводительной подписи и сертификата, то, как вы говорите, я просто проверю флаги и выполню другие шаги, которые могут быть применимы к моему случаю, а затем считаю, что процесс проверки регистрации завершен.

Ergin 08.04.2024 01:29

Другие вопросы по теме

Похожие вопросы

Создание повторно используемых компонентов формы с использованием библиотеки Formik и Yup для React + Vite
Почему моя функция запроса React Query вызывается, хотя ее следует отключить?
Невозможно удалить по идентификатору из mongoDB в приложении nextjs
Значение в env prod не работает, проект vite
Coreui – Как правильно создать ссылку выхода (со значком) в нижнем колонтитуле (CSidebarFooter) боковой панели? (в React) Свернуть/развернуть проблему
Redux запрашивает несколько createApi и редуктора с повторной выборкой
Воспроизведение голосов, сгенерированных AWS-Polly, на стороне клиента в моем веб-приложении
ReactJS вызывает родительскую функцию из дочернего компонента, не показывая обновленное родительское состояние
Доступ к изображениям в React, которые находятся за пределами папки проекта на локальном компьютере
Размещение аутентификации входа в систему с использованием функций Azure в приложении React