Узнайте о роли Web Bluetooth API для Passkeys. Мы расскажем, как определение доступности Bluetooth улучшает межсетевую аутентификацию (CDA) с помощью WebAuthn.
Vincent
Created: August 8, 2025
Updated: August 8, 2025
See the original blog version in English here.
Our mission is to make the Internet a safer place, and the new login standard passkeys provides a superior solution to achieve that. That's why we want to help you understand passkeys and its characteristics better.
Passkeys — это новый стандарт входа в систему в вебе. Одна из ключевых особенностей Passkeys — это межсетевая аутентификация (Cross-Device Authentication, CDA) с помощью Bluetooth и QR-кодов. В этом контексте становится важным еще один веб-API: Web Bluetooth API.
Позволяя веб-приложениям напрямую взаимодействовать с устройствами Bluetooth, Web Bluetooth API играет решающую роль в обеспечении безопасных и эффективных процессов аутентификации (особенно для CDA).
В этой статье мы рассмотрим принципы работы Web Bluetooth API и изучим значение определения доступности Bluetooth для аутентификации с помощью Passkeys. Мы хотим ответить на следующие вопросы:
Recent Articles
📖
WebAuthn pubKeyCredParams и credentialPublicKey: CBOR и COSE
📖
Протокол обмена учетными данными (CXP) и формат обмена (CXF)
🔑
Passkeys и WebAuthn PRF для сквозного шифрования (2025)
📖
Подсказки WebAuthn для учетных данных с открытым ключом / User-Agent
📖
WebAuthn Signal API: Обновление и удаление Passkeys на стороне клиента
Web Bluetooth API — это интерфейс JavaScript, который позволяет веб-приложениям получать доступ к устройствам Bluetooth и обмениваться с ними данными. Он является частью стандарта HTML5 и поддерживается такими браузерами, как Chrome, Edge и Opera. Этот API позволяет веб-приложениям:
У Web Bluetooth API есть три ключевые функции.
getAvailability()
возвращает promise, который разрешается в булево значение, указывающее, может ли user agent поддерживать Bluetooth (то есть есть ли у устройства модуль Bluetooth). Некоторые user agent'ы позволяют пользователю настраивать параметр, определяющий, какое значение возвращает этот метод.
navigator.bluetooth.getAvailability().then((available) => { if (available) { console.log("Это устройство поддерживает Bluetooth!"); } else { console.log("Увы! Bluetooth не поддерживается"); } });
getDevices()
возвращает promise, который разрешается в массив BluetoothDevices
, к которым разрешен доступ для данного источника (включая те, что находятся вне зоны действия или выключены). Разрешение получается через предыдущие вызовы Bluetooth.requestDevice()
.
navigator.bluetooth.getDevices().then((devices) => { devices.forEach((device) => { console.log("Устройство:", device.name); }); });
requestDevice()
возвращает promise для объекта BluetoothDevice
с указанными параметрами. Если нет пользовательского интерфейса для выбора, этот метод возвращает первое устройство, соответствующее критериям.
navigator.bluetooth .requestDevice({ filters: [ { services: ["battery_service"], }, ], }) .then((device) => { console.log("Устройство:", device.name); }) .catch((error) => { console.log("Ошибка:", error); });
Подробности и фрагменты кода можно найти здесь. Также здесь можно ознакомиться со стандартом W3C для Web Bluetooth.
navigator.bluetooth.requestDevice
должно быть инициировано действием пользователя, например касанием или щелчком мыши, из соображений безопасности.Чтобы проверить поддержку Web Bluetooth API, можно использовать следующий код:
if ("bluetooth" in navigator) { // Web Bluetooth API поддерживается console.log("Web Bluetooth поддерживается!"); } else { // Web Bluetooth API не поддерживается console.log("Web Bluetooth не поддерживается!"); }
Как вызывать конкретные функции, объяснялось выше.
Web Bluetooth API предлагает несколько преимуществ для разработчиков и пользователей:
Несмотря на свои преимущества, Web Bluetooth API имеет ограничения:
getAvailability()
будет возвращать false, даже если адаптер Bluetooth присутствует. Это контролируется через Permissions-Policy:Bluetooth
. Аналогично, даже если getAvailability()
возвращает true, адаптер Bluetooth может быть не включен, или пользователи могут отказать в разрешении на использование API при запросе.Распространение Web Bluetooth API все еще растет. По данным Can I Use на июнь 2024 года, 76,53% пользователей по всему миру имеют устройства с поддержкой Web Bluetooth API.
Однако отсутствие поддержки в Safari и Firefox остается серьезным препятствием, влияющим на пользовательский опыт в этих браузерах. Кроме того, некоторые функции (например, Bluetooth.getDevices()
) должны быть явно включены пользователем, что может затруднить использование API в фоновом режиме.
Актуальные данные можно найти по ссылке: https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API#browser_compatibility
Есть одна основная причина, по которой доверяющим сторонам следует знать о доступности Bluetooth, если они хотят предложить Passkeys на своих сайтах и в приложениях.
Одна из новых, инновационных функций Passkeys — это межсетевая аутентификация (Cross-Device Authentication, CDA), также известная как гибридная аутентификация. Эта функция позволяет пользователям аутентифицироваться на одном устройстве (обычно на настольном компьютере или ноутбуке) с помощью своих мобильных устройств через QR-коды и Bluetooth. Этот гибридный метод аутентификации повышает безопасность и удобство, обеспечивая бесшовный пользовательский опыт. Большинство нетехнических пользователей сегодня привыкли сканировать QR-коды, будь то во время пандемии COVID для регистрации или через мессенджеры, ориентированные на мобильные устройства, которые позже добавили поддержку для настольных компьютеров (например, WhatsApp или Telegram).
Выбор стратегии CDA имеет решающее значение в начале любого проекта с Passkeys. Чем больше вы полагаетесь на CDA, тем лучше должна быть его поддержка и надежность. Поэтому определение доступности Bluetooth на устройстве является обязательным.
Однако не все устройства имеют возможность подключения по Bluetooth или он может быть выключен. Для доверяющих сторон, предлагающих Passkeys, важно определять доступность Bluetooth, чтобы понять, можно ли использовать CDA или необходим другой, резервный метод аутентификации. Web Bluetooth API предлагает решение, позволяя веб-приложениям проверять доступность Bluetooth на устройствах пользователей.
Пожалуйста, имейте в виду, что CDA не всегда работает стабильно и иногда может не подключаться без видимых причин. Более того, из-за новизны API иногда он возвращает неверные результаты.
Отсутствие Web Bluetooth API в Firefox и Safari является проблемой, особенно для Firefox.
С Safari проблема менее остра, поскольку устройства на macOS, где может выполняться CDA, имеют встроенный Bluetooth с самых ранних моделей. Однако, если Bluetooth на macOS не работает, у пользователей могут возникнуть проблемы с межсетевой аутентификацией, и им придется устранять неполадки в настройках или использовать резервный метод. iPhone, работающие под управлением Safari, имеют встроенный Bluetooth с момента их появления.
Тем не менее, Firefox представляет собой серьезную проблему, поскольку он популярен на устройствах с Windows. Если пользователь использует Firefox и хочет применить CDA, доверяющая сторона не может надежно определить, доступен ли Bluetooth, так как Web Bluetooth API не реализован. Это может привести к плохому пользовательскому опыту, когда пользователи могут застрять на определенных этапах, не зная, что делать.
Как мы уже видели в предыдущих статьях, устройства на Windows отстают в плане внедрения Passkeys (см. также State of Passkeys). Давайте посмотрим, насколько распространена поддержка Bluetooth.
В Windows 10 нет строгого требования к наличию Bluetooth, но большинство современных ноутбуков и настольных компьютеров оснащены модулями Bluetooth. Однако пользователь может его отключить, или он может отсутствовать в некоторых конфигурациях, особенно на кастомных сборках ПК.
Windows 11, как и Windows 10, не требует наличия Bluetooth в обязательном порядке. Однако тенденция к более интегрированному и современному оборудованию означает, что большинство устройств, совместимых с Windows 11, скорее всего, будут иметь Bluetooth. Тем не менее, пользователи могут его отключить, что повлияет на реализацию CDA.
В таблице ниже показано, можно ли определить, готово ли настольное устройство к работе с Bluetooth и, следовательно, может ли оно использоваться как клиент CDA:
Операционная система | Аппаратная поддержка Bluetooth | Определение Bluetooth в браузере | |||
---|---|---|---|---|---|
Chrome | Edge | Firefox | Safari | ||
Windows 10 | низкая | ✅ | ✅ | ❌ | ❌ |
Windows 11 | средняя | ✅ | ✅ | ❌ | ❌ |
macOS | высокая | ✅ | ❌ | ❌ | ❌ |
Имейте в виду, что даже если ваше оборудование поддерживает Bluetooth, эта функция может быть отключена пользователем. Когда Bluetooth выключен, пользователь все равно может использовать CDA, потому что он может согласиться на его активацию, что работает для Windows и Mac: Запрос на включение Bluetooth в macOS
Запрос на включение Bluetooth в Windows 11
Информация о доступности Bluetooth особенно интересна для Windows 10 и Windows 11, где поддержка Bluetooth ниже, и существует очень высокая вероятность того, что потребуется межсетевая аутентификация (при входе с помощью Passkeys). Все последние устройства macOS поддерживают Bluetooth. Эти устройства macOS потенциально также имеют прямой доступ к Passkeys, хранящимся в iCloud Keychain, поэтому они не вызывают беспокойства.
На Windows 10 и Windows 11: используйте getAvailability()
, чтобы выяснить, может ли работать Bluetooth. В случае, если у пользователя есть только Passkeys, не связанные с Windows, вы можете немедленно переключиться на другие варианты аутентификации.
В ситуации, когда доступны только гибридные Passkeys, запуск аутентификации с помощью Passkeys не приведет к успешному входу, а скорее заведет пользователя в тупик. Для всех остальных браузеров на Windows 10 и Windows 11, к сожалению, нет другого способа выяснить, есть ли поддержка CDA.
Web Bluetooth API представляет собой мощный инструмент для улучшения аутентификации с помощью Passkeys за счет возможностей Bluetooth. Понимая и используя этот API, разработчики могут создавать более безопасные и удобные для пользователя методы аутентификации. Однако им также необходимо учитывать его ограничения и обеспечивать надежные резервные механизмы для поддержания бесшовного пользовательского опыта на разных браузерах и устройствах.
В этой статье мы дали ответы на три ключевых вопроса:
getAvailability()
, getDevices()
и requestDevice()
, чтобы проверить поддержку Bluetooth, получить список доступных устройств и запросить сопряжение.Для получения дополнительной информации о Web Bluetooth API и коллекции примеров, пожалуйста, перейдите по этой ссылке.
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents