Опубликовано: 15 января 2025 г., Последнее обновление: 9 апреля 2026 г.
WebAuthn предоставляет уникальные возможности, такие как взаимодействие с Bluetooth для гибридного протокола, связь с поставщиками паролей и предложение паролей в автозаполнении. Однако разные клиенты и аутентификаторы предлагают разный уровень поддержки функций WebAuthn. Это несоответствие может привести к фрагментированному пользовательскому опыту, когда некоторые пользователи могут столкнуться с ошибками или не иметь возможности использовать определенные варианты аутентификации. Предоставление разработчикам возможности определять возможности клиента позволяет им создавать более надежные потоки аутентификации, адаптирующиеся к этим различиям.
Метод PublicKeyCredential.getClientCapabilities() позволяет зависимым сторонам определить, какие функции WebAuthn поддерживаются браузером. Метод возвращает промис, который разрешается в список поддерживаемых возможностей, что позволяет разработчикам настраивать процессы аутентификации и рабочие процессы в зависимости от конкретных возможностей клиента.
Совместимость
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 .
Узнать больше
Чтобы узнать больше о паролях, начните с раздела «Вход без пароля с помощью паролей» .