Упрощенное обнаружение функций WebAuthn с помощью getClientCapabilities().

Опубликовано: 15 января 2025 г.

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

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

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

Browser Support

  • Хром: 133.
  • Край: 133.
  • Firefox: 135.
  • Сафари: 17.4.

Source

получитьКлиентскиеВозможности()

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

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

conditionalCreate

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

conditionalGet

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

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

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

passkeyPlatformAuthenticator

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

relatedOrigins

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

signalAllAcceptedCredentials

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

signalCurrentUserDetails

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

signalUnknownCredential

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

userVerifyingPlatformAuthenticator

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

расширения

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

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

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

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

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