Упрощенное обнаружение функции WebAuthn

Опубликовано: 15 января 2025 г., Последнее обновление: 9 апреля 2026 г.

WebAuthn предоставляет уникальные возможности, такие как взаимодействие с Bluetooth для гибридного протокола, связь с поставщиками паролей и предложение паролей в автозаполнении. Однако разные клиенты и аутентификаторы предлагают разный уровень поддержки функций WebAuthn. Это несоответствие может привести к фрагментированному пользовательскому опыту, когда некоторые пользователи могут столкнуться с ошибками или не иметь возможности использовать определенные варианты аутентификации. Предоставление разработчикам возможности определять возможности клиента позволяет им создавать более надежные потоки аутентификации, адаптирующиеся к этим различиям.

Метод PublicKeyCredential.getClientCapabilities() позволяет зависимым сторонам определить, какие функции WebAuthn поддерживаются браузером. Метод возвращает промис, который разрешается в список поддерживаемых возможностей, что позволяет разработчикам настраивать процессы аутентификации и рабочие процессы в зависимости от конкретных возможностей клиента.

Совместимость

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Сафари: 17.4.

Source

getClientCapabilities()

Метод getClientCapabilities() — это API WebAuthn, позволяющий зависимым сторонам определять, какие возможности доступны. Для использования API необходимо вызвать PublicKeyCredential.getClientCapabilities() . Возвращаемое обещание разрешается в объект, содержащий возможности, каждая из которых указывает на свою доступность значением true или false . Если возможность undefined , считается, что её доступность неизвестна.

if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  if (capabilities.conditionalGet === true &&
      capabilities.passkeyPlatformAuthenticator === true) {
    // The browser supports passkeys and the conditional mediation.
  }
}

conditionalCreate

Браузер может создать учетные данные без заметного модального окна, если пользователь уже дал согласие на их создание.

условный Получение

Браузер может аутентифицироваться, отображая ключи доступа в диалоговом окне автозаполнения, а не в заметном модальном окне. Существующий эквивалент — PublicKeyCredential.isConditionalMediationAvailable() .

гибридный транспорт

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

passkeyPlatformAuthenticator

Браузер может создать учетные данные и пройти аутентификацию с их помощью через платформу аутентификации пользователей или другое устройство, поддерживающее гибридный протокол. Эквивалентно hybridTransport || userVerifyingPlatformAuthenticator .

relatedOrigins

Браузер может создать учетные данные и пройти аутентификацию с их помощью, даже если они не совпадают с идентификатором RP, при условии, что он указан в соответствующем файле origins .

signalAllAcceptedCredentials

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

signalCurrentUserDetails

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

signalUnknownCredential

Браузер может сообщить поставщику ключей доступа об удаленных учетных данных на сервере , чтобы поставщик ключей доступа мог поддерживать список ключей доступа в соответствии с данными сервера.

userVerifyingPlatformAuthenticator

Браузер может создавать учетные данные и аутентифицироваться с их помощью через платформенный аутентификатор. Это не означает, что браузер поддерживает гибридный протокол. Существующий эквивалент — PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() .

расширения

Участники рынка также могут определять доступные расширения с помощью getClientCapabilities() .

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

Идентификатор начинается с префикса extension: за которым следует имя расширения. Имена расширений см. в документе WebAuthn Extension Identifiers, определенном IANA .

Узнать больше

Чтобы узнать больше о паролях, начните с раздела «Вход без пароля с помощью паролей» .