WebAuthn, FIDO2 и passkeys — это стандарты аутентификации без паролей, где вместо секретной строки используется криптопара ключей, хранимая на устройстве или в аппаратном токене. Они защищают от фишинга, утечек баз паролей и позволяют пользователю входить в сайты через биометрию, PIN или аппаратный ключ.
Краткий обзор основных идей

- WebAuthn — браузерный стандарт, позволяющий сайту работать с криптографическими ключами вместо паролей.
- FIDO2 объединяет WebAuthn и CTAP2, описывая полный стек от браузера до ключа безопасности.
- Passkeys — удобная пользовательская обертка над FIDO2: синхронизируемые ключи входа вместо паролей.
- Аппаратные и платформенные аутентификаторы могут сосуществовать: ключи, телефон, встроенный TPM.
- Основные ошибки внедрения: игнорирование резервных сценариев, неправильное хранение challenge, упор только на один браузер.
- Для бизнеса важно заранее оценить совместимость, стоимость ключей и услуги интеграции passkeys и FIDO2 аутентификации под ключ.
WebAuthn: принципы работы и архитектура протокола
WebAuthn — это W3C‑стандарт, который описывает, как веб‑приложение через браузер взаимодействует с аутентификатором (устройство или платформа), чтобы зарегистрировать и использовать криптографические ключи. Главная идея: приватный ключ никогда не покидает устройство пользователя, сайт видит только публичный ключ и подписи.
При регистрации сервер генерирует случайный challenge и параметры (RP ID, user id, политики), браузер передает их аутентификатору, тот создает пару ключей и возвращает публичный ключ и метаданные. Сервер сохраняет их в профиле пользователя. При входе сервер снова выдает challenge, аутентификатор подписывает его приватным ключом, и сервер проверяет подпись.
Архитектура WebAuthn включает три стороны: Relying Party (ваш сервер), User Agent (браузер) и Authenticator (платформенный, например Windows Hello, или внешний, например FIDO2‑ключ). Связь браузер-аутентификатор описана протоколом CTAP2, а связь браузер-сайт — JavaScript API WebAuthn.
Типичные ошибки архитектуры:
- Использование домена авторизации, не совпадающего с RP ID (поддомены без учета ограничений), что ломает WebAuthn на части пользователей.
- Хранение challenge в сессии без проверки соответствия запросу, что открывает возможность повторного использования ответа.
- Попытка сделать WebAuthn универсальной заменой JWT/сессий, вместо использования его как механизма первичной аутентификации.
FIDO2: стандарты, компоненты и модель доверия

FIDO2 — это набор стандартов, объединяющих WebAuthn и CTAP2. Он описывает полный путь от браузера до устройства-аутентификатора и то, как формируется доверие к устройству и его ключам.
- WebAuthn (W3C): определяет JS‑API в браузере и формат данных, которыми обмениваются браузер и сервер.
- CTAP2 (FIDO Alliance): описывает, как браузер или ОС общаются с внешним аутентификатором (USB, NFC, BLE).
- Аутентификаторы: платформенные (TPM, Secure Enclave, Android Keystore) и внешние FIDO2 ключи безопасности для браузера заказать можно у разных вендоров.
- Модель доверия: сервер доверяет публичному ключу, подписанному аутентификатором, а дополнительно может проверять аттестацию, чтобы убедиться в типе и происхождении устройства.
- Защита от фишинга: ключ привязан к домену (RP ID), поэтому поддельный сайт не сможет использовать тот же ключ, даже если пользователь попытается.
- Устройства «пароли будущего»: аппаратные ключи WebAuthn FIDO2 для бизнеса стоимость которых становится все ниже, постепенно заменяют SMS‑коды и OTP‑приложения.
Распространенные ошибки работы с моделью доверия и их быстрое предотвращение:
- Ошибка: жёсткое требование аттестации для всех устройств, блокирующее большинство пользователей.
Как предотвратить: включить аттестацию только для чувствительных ролей или административных аккаунтов, для остальных принимать ключи без строгой проверки аттестации. - Ошибка: отсутствие политики по потерянным устройствам и ключам.
Как предотвратить: заранее описать процедуру: резервные passkeys, второй FIDO2‑ключ, верификация личности через поддержку. - Ошибка: смешивание «устройств для входа» и «устройств для подписания транзакций» в одной политике.
Как предотвратить: разделить уровни риска: для входа — более гибкая политика, для транзакций — жесткая (только аппаратные ключи).
Passkeys: как они заменяют пароли и что меняется для пользователей
Passkeys — это пользовательское имя для FIDO2‑учетных данных, которые могут синхронизироваться между устройствами (через Apple, Google, Microsoft аккаунты) и выглядят как «ключ входа», а не как длинный пароль. Для пользователя это обычно вход по Face ID, Touch ID, PIN или локальному жесту.
Ключевой эффект: пользователю не нужно придумывать и запоминать пароль. Passkey создается при регистрации и хранится в защищенном хранилище устройства или облаке провайдера платформы. На сайте вы видите только публичный ключ и идентификатор, а пользователь видит знакомое окно «войти с помощью телефона/биометрии».
Типичные сценарии применения passkeys:
- Потребительские сервисы (B2C): магазины, банки, SaaS, где «пароли будущего WebAuthn passkeys FIDO2 купить решение» обсуждается на уровне стратегии безопасности и user experience.
- Корпоративный доступ (B2E): сотрудники входят во внутренние порталы с помощью корпоративного ноутбука и встроенного аутентификатора без пароля.
- Гибридный вход: комбинация классического логина+пароля и passkeys, когда пользователю постепенно предлагают «обновить вход» до безпарольного.
- Мобильный как ключ: пользователь подтверждает вход на десктопе через запрос на телефоне (чаще всего через QR/BT‑канал).
- Комбинации с аппаратными токенами: для админов — обязательный аппаратный ключ, для обычных пользователей — passkeys, синхронизируемые через аккаунт платформы.
Частые ошибки с passkeys и как их избежать за несколько шагов:
- Не объяснять пользователю разницу между паролем и passkey — добавьте короткий текст и иллюстрацию при регистрации.
- Отключать пароль сразу после первого passkey — оставьте переходный период и резервный вход.
- Жестко требовать биометрию в средах, где она может быть запрещена политиками — разрешите PIN как запасной метод.
Поддержка в браузерах и ОС: совместимость, ограничения и график внедрения
WebAuthn и FIDO2 поддерживаются основными браузерами и ОС, но детали различаются: способы хранения passkeys, типы аутентификаторов, кросс‑девайс вход. Поэтому при планировании внедрения важно учитывать реальные комбинации «браузер + ОС + устройство».
| Браузер / Платформа | Поддержка WebAuthn | Поддержка passkeys | Особые ограничения |
|---|---|---|---|
| Chrome на Windows | Да, платформенные и внешние FIDO2‑ключи | Да, через Google Account и Windows Hello | Может требоваться политика домена для корпоративных устройств |
| Chrome на Android | Да, через Android Keystore и внешние ключи | Да, синхронизация через Google Account | Кросс‑девайс вход зависит от версии Android и включенных сервисов |
| Safari на iOS / macOS | Да, через iCloud Keychain и Secure Enclave | Да, iCloud passkeys с синхронизацией | Ограничения на нестандартные браузеры на iOS |
| Edge на Windows | Да, использует те же системные API, что и Chrome | Да, поддержка passkeys и Windows Hello | Политики организации могут ограничивать внешние ключи |
| Firefox (desktop) | Да, поддержка WebAuthn | Ограниченная, зависит от платформы и синхронизации | Некоторые функции passkeys могут требовать включения флагов |
Преимущества современной поддержки
- Единый WebAuthn API во всех основных браузерах.
- Платформенные аутентификаторы доступны «из коробки» на Windows, macOS, Android, iOS.
- Кросс‑девайс passkeys облегчают вход с новых устройств без паролей.
- Аппаратные ключи можно стандартно использовать в разных ОС.
Ограничения и риски совместимости
- Часть пользователей остается на старых браузерах или корпоративных сборках без WebAuthn.
- Различия в UX между платформами, необходимость отдельных инструкций.
- Ограничения на использование внешних FIDO2‑ключей политиками безопасности в компаниях.
- Неравномерная поддержка продвинутых функций passkeys в разных браузерах.
Мини‑сценарии применения перед оценкой плюсов и минусов
Несколько быстрых сценариев, которые стоит протестировать до массового запуска:
- Регистрация и вход с ноутбука (Windows Hello) и с телефона (Android/iOS passkey) одним и тем же аккаунтом.
- Восстановление доступа при утрате телефона: использование второго аппаратного ключа и резервного сценария.
- Работа в режиме «гостевого» компьютера: вход через мобильный passkey без сохранения данных на ПК.
Практическая реализация: API, примерный flow и минимальный код для входа
WebAuthn реализуется через два основных вызова: navigator.credentials.create() для регистрации и navigator.credentials.get() для аутентификации. Между ними — ваш сервер, который готовит challenge, параметры и валидирует ответы (attestation/assertion).
Примерный flow регистрации
- Клиент отправляет на бэкенд запрос «создать WebAuthn‑учетку» для текущего пользователя.
- Сервер генерирует случайный challenge, подготавливает параметры (RP, user, политики) и отправляет их клиенту.
- Фронтенд вызывает
navigator.credentials.create({ publicKey: options }). - Браузер общается с аутентификатором, получает ответ и возвращает его JS‑коду.
- Клиент отправляет результат на сервер, сервер проверяет подписи и сохраняет публичный ключ.
Минимальный пример входа (псевдо‑код JS)
// 1. Запрашиваем challenge у сервера
const options = await fetch("/webauthn/login/options").then(r => r.json());
// 2. Вызываем WebAuthn
const assertion = await navigator.credentials.get({ publicKey: options });
// 3. Отправляем результат на сервер для проверки
await fetch("/webauthn/login/verify", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(assertion)
});
Типичные ошибки разработки и как их быстро предотвратить
- Неверная сериализация бинарных полей.
Проблема: попытка слать ArrayBuffer напрямую в JSON.
Быстрое решение: всегда кодировать бинарные поля (challenge, id, clientDataJSON) в Base64URL и декодировать на сервере. - Игнорирование origin и RP ID при проверке.
Проблема: сервер не сравнивает origin/ RP ID из clientDataJSON с ожидаемыми значениями.
Быстрое решение: явно валидировать эти поля и отклонять любые несоответствия. - Отсутствие тайм‑аута на стороне фронтенда.
Проблема: пользователь зависает в «ожидании» при неудачном вызове WebAuthn.
Быстрое решение: оборачивать вызовы в собственный тайм‑аут и показывать fallback‑варианты входа. - Один‑единственный сценарий без fallback’ов.
Проблема: WebAuthn недоступен — пользователь заблокирован.
Быстрое решение: предусмотреть пароль/OTP на переходный период и четко объяснить пользователю альтернативы. - Жёсткое требование аппаратного ключа для всех.
Проблема: пользователи не готовы «срочно купить ключ».
Быстрое решение: для массовых сценариев использовать passkeys, а аппаратные ключи — как усиление защиты для админов.
Чек‑лист быстрого внедрения WebAuthn/passkeys
- Проверить поддержку WebAuthn в целевых браузерах и ОС по вашей аудитории.
- Реализовать серверные эндпоинты для генерации и проверки challenge.
- Добавить на фронтенд слой кодирования/декодирования Base64URL.
- Реализовать гибкую конфигурацию auth‑политик (пароль, passkey, FIDO2‑ключ).
- Протестировать сценарии потери устройства и входа с нового девайса.
Миграция от паролей: стратегии, дорожная карта и оценка рисков
Переход к FIDO2 и passkeys — это не мгновенный отказ от паролей, а поэтапная миграция. Она включает технические шаги, изменение UX и обновление внутренних процессов безопасности.
Базовая дорожная карта миграции
- Аналитика и пилот: оценить долю актуальных браузеров, типы устройств и сценарии. Для части пользователей запустить пилот «включить passkeys».
- Гибридный этап: разрешить вход по паролю и WebAuthn; активно предлагать пользователю «создать ключ входа» вместо пароля.
- Усиление доверия: подключать аппаратные ключи WebAuthn FIDO2 для бизнеса стоимость которых оправдана для админов и VIP‑клиентов.
- Сокращение роли пароля: постепенно требовать пароль только при чувствительных операциях или редких изменениях профиля.
- Почти безпарольный режим: сохранить пароль только как аварийный канал для редких случаев восстановления.
Мини‑кейс: B2C‑сервис с поддержкой passkeys
Компания запускает потребительский сервис и планирует внедрение WebAuthn и passkeys для сайта, цена ошибки при авторизации высока. Выбран поэтапный вариант:
- На регистрации: помимо пароля, пользователю сразу предлагают создать passkey, объясняя выгоду в одном абзаце.
- Через несколько месяцев: для активных пользователей показывается баннер «войти без пароля», переходящий в настройку passkeys.
- Для админов: выдают физические FIDO2‑ключи и настраивают обязательный вход только через них.
- Через год: пароль остается только как резервный вход через поддержку.
В ходе проекта учитываются и закупки: fido2 ключи безопасности для браузера заказать у надежного вендора, оценить суммарные расходы и сравнить с убытками от компрометации аккаунтов, а также заранее просчитать, сколько стоят аппаратные ключи WebAuthn FIDO2 для бизнеса и как это повлияет на TCO.
Частая ошибка миграции — думать только о лицензиях и не учитывать стоимость поддержки пользователей. Быстрый способ предотвратить: включить в бюджет обучение поддержки и простые пошаговые инструкции, а также рассмотреть внешние услуги интеграции passkeys и FIDO2 аутентификации под ключ вместо разработки всей инфраструктуры с нуля.
Краткий список рекомендаций по совместимости
- Не полагаться на один браузер: тестировать Chrome, Edge, Safari, Firefox на основных платформах.
- Предусмотреть разные типы аутентификаторов: платформенные и внешние.
- Явно логировать ошибки WebAuthn на фронте и бэкенде (без PII) для диагностики.
- Поддерживать fallback‑методы до тех пор, пока доля неподдерживаемых сред не станет минимальной.
Разъяснения по типичным практическим ситуациям
Нужно ли сразу отключать пароли после внедрения WebAuthn?

Нет, лучше использовать гибридный период. Оставьте пароль как резервный вход и постепенно переводите активных пользователей на passkeys, анализируя метрики ошибок и обращений в поддержку.
Обязательны ли аппаратные FIDO2‑ключи для всех пользователей?
Нет. Аппаратные ключи оправданы для админов и высокорисковых ролей. Для массовых B2C‑сервисов достаточно passkeys на устройствах пользователей и, при необходимости, дополнительных факторов.
Что делать, если пользователь потерял телефон с passkeys?
Нужен заранее продуманный сценарий: второй аутентификатор (аппаратный ключ или passkey на другом устройстве) и процедура верификации личности через поддержку с временным паролем или ссылкой входа.
Можно ли использовать WebAuthn в корпоративной сети с прокси?
Да, WebAuthn работает поверх обычного HTTPS. Важно, чтобы домены RP ID были доступны и не переписывались прокси, а также чтобы политики не блокировали доступ к внешним FIDO2‑ключам, если они используются.
Как быстро проверить, работает ли WebAuthn в моем приложении?
Соберите минимальный прототип: один эндпоинт для регистрации, один для входа, базовую реализацию WebAuthn на фронтенде и протестируйте на нескольких устройствах и браузерах по чек‑листу совместимости.
Можно ли полностью обойтись без серверных изменений?
Нет. WebAuthn требует серверной логики генерации challenge и проверки подписей. «Фронтенд‑только» решение небезопасно и не позволит корректно привязать ключи к учетным записям.
Как оценить бюджет проекта по внедрению FIDO2/passkeys?
Учтите разработку, аудит безопасности, возможную закупку FIDO2‑ключей, рост нагрузки на поддержку и, при необходимости, стоимость внешних услуг интеграции WebAuthn и passkeys под ключ.

