Ориентация ключей доступа

Веб-функции: Веб-аутентификация

В этом руководстве приведены подробные инструкции по реализации безопасной аутентификации с помощью ключей доступа и управлению учетными данными в современных веб-приложениях.

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 приведены в следующих руководствах: