Get your free and exclusive 80-page Banking Passkey Report
web bluetooth cover

Web Bluetooth API 与 Passkeys

了解 Web Bluetooth API 对 Passkeys 的作用!学习蓝牙可用性检测如何通过 WebAuthn 增强跨设备身份验证 (CDA)。

Vincent Delitz

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.

概览#

1. 简介:Web Bluetooth API 与 Passkeys#

Passkeys 是网络上新的登录标准。Passkey 的核心功能之一是通过蓝牙和二维码进行跨设备身份验证 (CDA)。在这种情况下,另一个 Web API 变得非常重要:Web Bluetooth API

通过让 Web 应用能够直接与蓝牙设备交互,Web Bluetooth API 在确保安全高效的身份验证流程(尤其是在 CDA 方面)中扮演着至关重要的角色。

这篇博客文章将介绍 Web Bluetooth API 的工作原理,并探讨蓝牙检测对 Passkey 身份验证的影响。我们希望回答以下问题:

  1. 什么是 Web Bluetooth API?
  2. 如何使用 Web Bluetooth API?
  3. 为什么蓝牙检测对 Passkeys 很重要?

2. 什么是 Web Bluetooth API?#

Web Bluetooth API 是一个 JavaScript 接口,允许 Web 应用访问蓝牙设备并与之通信。它是 HTML5 标准的一部分,并得到了 Chrome、Edge 和 Opera 等浏览器的支持。该 API 使 Web 应用能够:

  • 扫描附近的低功耗蓝牙 (BLE) 设备
  • 请求配对权限
  • 使用通用属性配置文件 (GATT) 协议交换数据。

Web Bluetooth API 有三个关键函数。

2.1 getAvailability()#

getAvailability() 返回一个 promise,该 promise 会解析为一个布尔值,指示用户代理是否支持蓝牙(即设备是否具有蓝牙模块)。一些用户代理允许用户配置一个选项,来指定此方法返回的值。

navigator.bluetooth.getAvailability().then((available) => { if (available) { console.log("This device supports Bluetooth!"); } else { console.log("Doh! Bluetooth is not supported"); } });
Substack Icon

Subscribe to our Passkeys Substack for the latest news.

Subscribe

2.2 getDevices()#

getDevices() 返回一个 promise,该 promise 会解析为一个 BluetoothDevices 数组,其中包含源站允许访问的设备(包括超出范围和已关机的设备)。权限是通过之前调用 Bluetooth.requestDevice() 获得的。

navigator.bluetooth.getDevices().then((devices) => { devices.forEach((device) => { console.log("Device:", device.name); }); });

2.3 requestDevice()#

requestDevice() 返回一个 promise,该 promise 会解析为一个带有指定选项的 BluetoothDevice 对象。如果没有选择器界面,此方法将返回第一个符合条件的设备。

navigator.bluetooth .requestDevice({ filters: [ { services: ["battery_service"], }, ], }) .then((device) => { console.log("Device:", device.name); }) .catch((error) => { console.log("Error:", error); });

详细信息和代码片段可以在这里找到。也可以在这里找到 Web Bluetooth 的 W3C 标准

Slack Icon

Become part of our Passkeys Community for updates & support.

Join

3. Web Bluetooth API 的特点#

  • 仅限 HTTPS: Web Bluetooth API 仅在安全上下文 (HTTPS) 中可用,以确保数据传输的安全性。
  • 需要用户手势: 出于安全原因,通过 navigator.bluetooth.requestDevice 进行的设备发现必须由用户手势(如触摸或鼠标点击)触发。

4. 如何使用 Web Bluetooth API#

要检查是否支持 Web Bluetooth API,可以使用以下代码:

if ("bluetooth" in navigator) { // Web Bluetooth API is supported console.log("Web Bluetooth is supported!"); } else { // Web Bluetooth API is not supported console.log("Web Bluetooth is not supported!"); }

上面已经解释了如何调用具体的函数。

5. Web Bluetooth API 的优势#

Web Bluetooth API 为开发者和用户提供了几个优势:

  • 交互性: 使 Web 应用能够与蓝牙设备交互,无需原生应用或插件。
  • 增强的用户体验: 允许访问无线设备(如心率监测器或音乐控制器)的设备功能和传感器。
  • 安全性与隐私: 用户必须授予设备访问权限,该权限可以随时撤销。

6. Web Bluetooth API 的问题#

尽管有这些好处,Web Bluetooth API 仍存在一些局限性:

  • Safari 和 Firefox 不支持: 并非所有浏览器都支持该 API。值得注意的是,Safari 和 Firefox 不支持它,这可能会影响相当一部分用户。
  • 依赖设备能力: 该 API 仅适用于兼容的低功耗蓝牙 (BLE) 设备。此外,由于电池电量低或超出范围等因素,设备可能无法被发现。
  • 不断发展的规范: 作为一个草案规范,Web Bluetooth API 可能会发生变化。开发者需要随时了解最新的发展和浏览器兼容性情况。
  • 误报:该 API 有时可能会在蓝牙实际不可用时指示支持蓝牙。
  • 用户控制的可用性: 用户和浏览器可以禁用蓝牙权限,导致即使存在蓝牙适配器,getAvailability() 也会返回 false。这是通过 Permissions-Policy:Bluetooth 控制的。同样,即使 getAvailability() 返回 true,蓝牙适配器也可能未通电,或者用户在被提示时可能会拒绝使用该 API 的权限。

7. Web Bluetooth API 的采用情况#

Web Bluetooth API 的采用率仍在增长。根据 Can I Use 的数据,截至 2024 年 6 月,全球 76.53% 的用户设备支持 Web Bluetooth API。

然而,Safari 和 Firefox 缺乏支持仍然是一个重大障碍,影响了这些浏览器上的用户体验。此外,某些功能(例如 Bluetooth.getDevices())必须由用户明确开启,这给在后台使用该 API 带来了挑战。

在此处查找最新数据: https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Bluetooth_API#browser_compatibility

8. 为什么蓝牙检测对 Passkeys 很重要?#

当信赖方希望在其网站和应用程序中提供 Passkeys 时,他们应该了解蓝牙可用性的一个主要原因。

8.1 Passkey 核心功能:通过二维码和蓝牙进行跨设备身份验证 (CDA)#

Passkeys 的一项创新功能是跨设备身份验证 (CDA)——也称为混合身份验证。该功能允许用户在一台设备(通常是台式机或笔记本电脑)上,通过二维码和蓝牙使用其移动设备进行身份验证。这种混合身份验证方法增强了安全性和便利性,提供了无缝的用户体验。如今,大多数非技术用户已经习惯了扫描二维码,无论是在新冠疫情期间用于登记,还是通过后来增加桌面支持的移动优先消息应用(例如 WhatsApp 或 Telegram)。

在任何 Passkey 项目的开始阶段,决定 CDA 策略至关重要。我们越依赖 CDA,其支持和可靠性就需要越好。因此,检测设备上的蓝牙可用性至关重要。

8.2 蓝牙并非总是可用,且可能对 CDA 用户体验不利#

然而,并非所有设备都具备蓝牙功能,或者蓝牙可能被关闭。对于提供 Passkeys 的信赖方来说,检测蓝牙可用性至关重要,以便确定是否可以使用 CDA,或者是否需要另一种备用身份验证方法。Web Bluetooth API 提供了一个解决方案,使 Web 应用能够检查用户设备上的蓝牙可用性。

请记住,CDA 并不总是稳定的,有时会无故连接失败。此外,由于该 API 较新,API 有时会返回错误的结果

8.3 蓝牙不可用在 Firefox 和 Safari 中的不同影响#

Firefox 和 Safari 中 Web Bluetooth API 的不可用是一个问题,尤其是对于 Firefox。

Safari 的问题较小,因为可能执行 CDA 的 macOS 设备从早期型号开始就内置了蓝牙。但是,如果macOS 上的蓝牙无法正常工作,用户可能会在跨设备身份验证时遇到问题,需要排查设置或恢复到备用方法。运行 Safari 的 iPhone 从一开始就内置了蓝牙。

不过,Firefox 是一个大问题,因为它在 Windows 设备上很受欢迎。如果用户使用 Firefox 并希望使用 CDA,由于 Web Bluetooth API 未实现,信赖方无法可靠地确定蓝牙是否可用。这可能会导致糟糕的用户体验,用户可能会在某些环节卡住而不知所措。

正如我们在之前的博客中看到的,Windows 设备在 Passkey 采用方面相对落后(另请参阅 State of Passkeys)。让我们来看看蓝牙的普及程度如何。

9. Windows 10 有蓝牙要求吗?#

Windows 10 没有严格的蓝牙要求,但大多数现代笔记本电脑和台式机都具备蓝牙功能。然而,用户可能已将其关闭,或者在某些配置中可能不可用,尤其是在定制的台式机上。

10. Windows 11 有蓝牙要求吗?#

Windows 11 与 Windows 10 类似,并不强制要求蓝牙。然而,硬件集成化和现代化的趋势意味着大多数兼容 Windows 11 的设备很可能具备蓝牙功能。尽管如此,用户仍然可以禁用它,这会影响 CDA 的实现。

11. 建议#

在下表中,您可以看到是否可以确定台式机设备是否支持蓝牙,从而可以用作 CDA 客户端:

操作系统蓝牙硬件支持浏览器蓝牙检测
ChromeEdgeFirefoxSafari
Windows 10
Windows 11
macOS

请记住,即使您的硬件支持蓝牙,用户也可能关闭了蓝牙功能。当蓝牙关闭时,用户仍然可以使用 CDA,因为用户仍然可以选择激活它,这在 Windows 和 Mac 上都有效: macOS 请求开启蓝牙

Windows 11 请求开启蓝牙

蓝牙可用性信息在 Windows 10 和 Windows 11 上尤其值得关注,因为这些系统上的蓝牙支持率较低,并且在基于 Passkey 的登录中,很可能需要进行跨设备身份验证。近期的 macOS 设备都支持蓝牙。这些 macOS 设备还可能直接访问存储在 iCloud 钥匙串中的 Passkeys,因此不是我们担心的重点。

在 Windows 10 和 Windows 11 上:使用 getAvailability() 来确定蓝牙是否可用。如果用户只有非 Windows 的 Passkeys,您可以立即回退到其他身份验证选项。

在只有混合 Passkeys 可用的情况下,触发 Passkey 身份验证不会成功,反而会给用户带来死胡同。对于 Windows 10 和 Windows 11 上的所有其他浏览器,不幸的是,没有其他方法可以确定是否支持 CDA。

12. 结论:用于 Passkeys 的 Web Bluetooth API#

Web Bluetooth API 是一个强大的工具,可以通过蓝牙功能增强 Passkey 身份验证。通过理解和利用这个 API,开发者可以创建更安全、更用户友好的身份验证方法。然而,他们也必须应对其局限性,并确保有强大的备用机制,以在不同浏览器和设备上保持无缝的用户体验。

通过这篇博客文章,我们回答了三个核心问题:

  1. 什么是 Web Bluetooth API? Web Bluetooth API 是一个 JavaScript 接口,允许 Web 应用访问蓝牙设备并与之通信,从而促进安全交互。
  2. 如何使用 Web Bluetooth API? 通过调用 getAvailability()getDevices()requestDevice() 等函数来使用 Web Bluetooth API,以检查蓝牙支持、列出可访问的设备并请求设备配对。
  3. 为什么蓝牙检测对 Passkeys 很重要? 通过将 Web Bluetooth API 集成到您的 Passkey 实施策略中,您可以构建一个出色的基于 Passkey 的身份验证解决方案,该方案仅在有设备可以检测到蓝牙支持时才回退到 CDA。

有关 Web Bluetooth API 的更多信息和示例集,请点击此处

Add passkeys to your app in <1 hour with our UI components, SDKs & guides.

Start Free Trial

Share this article


LinkedInTwitterFacebook

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