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