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

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

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

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

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

Browser Support

  • Хром: не поддерживается.
  • Край: не поддерживается.
  • Firefox: не поддерживается.
  • Сафари: 17.4.

getClientCapabilities()

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.
    }
  }
}

условноеСоздание

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

условное получение

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

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

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

ключ доступаPlatformAuthenticator

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

связанныеПроисхождение

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

сигналаллакцептедкредентиалс

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

SignCurrentUserDetails

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

сигналUnknownCredential

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

userVerifyingPlatformAuthenticator

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

расширения

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

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

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

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

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