В этом руководстве приведены подробные инструкции по реализации безопасной аутентификации с помощью ключей доступа и управлению учетными данными в современных веб-приложениях.
1. Основные требования для ключей доступа
Ключи доступа используют Web Authentication API (WebAuthn), который накладывает строгие ограничения безопасности, которые необходимо соблюдать перед любой попыткой реализации:
- Безопасные контексты. Методы WebAuthn (
navigator.credentials.createиnavigator.credentials.get) строго ограничены безопасными контекстами. Приложения ДОЛЖНЫ работать наhttps://в рабочей среде или наhttp://localhostв среде разработки. - Идентификатор проверяющей стороны (RP ID). Все учетные данные привязаны к RP ID (по сути, доменному имени приложения). Идентификатор проверяющей стороны, переданный в параметрах на стороне сервера, должен совпадать с доменным именем текущего источника или быть его действительным суффиксом (например,
example.comподходит дляlogin.example.com). Несовпадения приводят к исключениямSecurityErrorна стороне клиента.
2. Ограничение UX, связанное с AAGUID
Глобальный уникальный идентификатор подтверждения аутентификатора (AAGUID) – это 128-битный идентификатор, возвращаемый в данных подтверждения регистрации, который представляет модель/поставщика аутентификатора (например, Google Менеджер паролей, Связка ключей iCloud, 1Password).
- Использование только для подсказок в интерфейсе. Полагающиеся стороны ДОЛЖНЫ использовать AAGUID исключительно для подсказок в интерфейсе (например, для отображения названия и значка поставщика ключа доступа в списке управления).
- Отсутствие зависимостей безопасности. Приложения НЕ ДОЛЖНЫ использовать AAGUID для криптографической защиты или принятия решений о доступе. Ключи доступа платформы в настоящее время не предоставляют криптографическое подтверждение для своих AAGUID, то есть агенты пользователя могут изменять или имитировать их.
3. Рекомендации по разделению библиотек
Для генерации параметров FIDO2/WebAuthn и проверки подписи разработчики ДОЛЖНЫ использовать проверенные библиотеки ПО с открытым исходным кодом для каждого языка, а не криптографию собственной разработки.
- JavaScript/TypeScript: SimpleWebAuthn (github.com/MasterKale/SimpleWebAuthn)
- Python: py_webauthn (github.com/duo-labs/py_webauthn)
- Java: Java WebAuthn Server (github.com/Yubico/java-webauthn-server), WebAuthn4J (github.com/webauthn4j/webauthn4j).
- .NET: библиотека .NET для FIDO2 (github.com/abergs/fido2-net-lib)
- Go: библиотека WebAuthn Go (github.com/go-webauthn/webauthn)
- Ruby: WebAuthn Ruby (github.com/cedarcode/webauthn-ruby)
- PHP WebAuthn Framework (github.com/web-auth/webauthn-framework)
4. Справочная матрица вариантов использования
Выберите подходящий вариант использования и откройте руководство по внедрению. Для каждого сценария использования есть критически важные API (PublicKeyCredential.parseCreationOptionsFromJSON, parseRequestOptionsFromJSON, signalAllAcceptedCredentials, signalCurrentUserDetails, signalUnknownCredential, условная медиация, обработка AAGUID и т. д.), которые описаны только в руководстве по этому сценарию. НЕ пропускайте этот шаг и НЕ заменяйте сторонние оболочки библиотек (например, startAuthentication/startRegistration SimpleWebAuthn) на клиенте. Вызывайте нативные API браузера WebAuthn напрямую. Рекомендации по библиотекам в разделе 3 относятся только к серверной части (проверка FIDO2 на сервере).
Подробные сведения о реализации ключей доступа и WebAuthn приведены в следующих руководствах:
- Регистрация ключей доступа. Регистрация ключей доступа – предложение зарегистрировать новый ключ доступа и продвижение этой функции.
- Условное создание ключа доступа (Passkey Conditional Create (Post-Login Promotion)) – незаметная регистрация ключей доступа сразу после успешного входа с паролем.
- Аутентификация с помощью ключа доступа (Passkey Authentication) – вход с помощью кнопки и автозаполнения.
- Быстрый вход. Быстрый вход с немедленным показом интерфейса – контекстный вход на месте с использованием локальных ключей доступа и сохраненных паролей до навигации по страницам.
- Управление ключами доступа. Управление ключами доступа – синхронизация списков, переименований и удалений с менеджерами паролей.
- Повторная аутентификация с помощью ключа доступа. Повторная аутентификация с помощью ключа доступа – повторная проверка вернувшихся пользователей, выполнивших вход, при выполнении действий, связанных с безопасностью.