¡Entiende el papel de la API Web Bluetooth para las passkeys! Aprende cómo la detección de disponibilidad de Bluetooth mejora la autenticación entre dispositivos (CDA) con 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.
Las passkeys son el nuevo estándar de inicio de sesión en la web. Una de las características principales de las passkeys es la autenticación entre dispositivos (CDA) a través de Bluetooth y códigos QR. En este contexto, otra API web cobra importancia: la API Web Bluetooth.
Al permitir que las aplicaciones web interactúen directamente con dispositivos Bluetooth, la API Web Bluetooth juega un papel crucial para garantizar procesos de autenticación seguros y eficientes (especialmente para la CDA).
En esta entrada de blog, presentaremos el funcionamiento de la API Web Bluetooth y exploraremos las implicaciones de la detección de Bluetooth para la autenticación con passkeys. Queremos responder las siguientes preguntas:
Recent Articles
📖
Capacidades de cliente de WebAuthn
📖
API Signal de WebAuthn: Actualizar y eliminar passkeys en el lado del cliente
🔑
Passkeys y la extensión PRF de WebAuthn para el cifrado de extremo a extremo (2025)
📖
Protocolo de Intercambio de Credenciales (CXP) y Formato (CXF) de WebAuthn
📖
WebAuthn pubKeyCredParams y credentialPublicKey: CBOR y COSE
La API Web Bluetooth es una interfaz de JavaScript que permite a las aplicaciones web acceder y comunicarse con dispositivos Bluetooth. Forma parte del estándar HTML5 y es compatible con navegadores como Chrome, Edge y Opera. Esta API permite a las aplicaciones web:
Hay tres funciones clave en la API Web Bluetooth.
getAvailability()
devuelve una promesa que se resuelve con un valor booleano que indica si el user agent puede soportar Bluetooth (es decir, si el dispositivo tiene un módulo Bluetooth). Algunos user agents permiten al usuario configurar una opción que especifica qué valor devuelve este método.
navigator.bluetooth.getAvailability().then((available) => { if (available) { console.log("This device supports Bluetooth!"); } else { console.log("Doh! Bluetooth is not supported"); } });
getDevices()
devuelve una promesa que se resuelve con un array de BluetoothDevices
a los que el origen tiene permiso para acceder (incluidos aquellos que están fuera de alcance o apagados). El permiso se obtiene a través de llamadas previas a Bluetooth.requestDevice()
.
navigator.bluetooth.getDevices().then((devices) => { devices.forEach((device) => { console.log("Device:", device.name); }); });
requestDevice()
devuelve una promesa a un objeto BluetoothDevice
con las opciones especificadas. Si no hay una interfaz de usuario para elegir, este método devuelve el primer dispositivo que coincida con los criterios.
navigator.bluetooth .requestDevice({ filters: [ { services: ["battery_service"], }, ], }) .then((device) => { console.log("Device:", device.name); }) .catch((error) => { console.log("Error:", error); });
Puedes encontrar más detalles y fragmentos de código aquí. También puedes consultar aquí el estándar del W3C para Web Bluetooth.
navigator.bluetooth.requestDevice
debe ser activado por un gesto del usuario, como un toque o un clic del ratón, por razones de seguridad.Para comprobar si la API Web Bluetooth es compatible, puedes usar el siguiente código:
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!"); }
Cómo se llaman las funciones específicas se explica más arriba.
La API Web Bluetooth ofrece varias ventajas para desarrolladores y usuarios:
A pesar de sus beneficios, la API Web Bluetooth tiene limitaciones:
getAvailability()
devuelva false
aunque haya un adaptador Bluetooth presente. Esto se controla a través de la Permissions-Policy:Bluetooth
. Del mismo modo, aunque getAvailability()
devuelva true
, es posible que el adaptador Bluetooth no esté encendido o que los usuarios denieguen el permiso para usar la API cuando se les solicite.La adopción de la API Web Bluetooth sigue creciendo. A junio de 2024, según Can I Use, el 76.53% de los usuarios globales tienen dispositivos con soporte para la API Web Bluetooth.
Sin embargo, la falta de soporte en Safari y Firefox sigue siendo un obstáculo importante, lo que afecta la experiencia del usuario en esos navegadores. Además, algunas de las funciones (p. ej., Bluetooth.getDevices()
) deben ser activadas explícitamente por el usuario, lo que puede ser un desafío para usar la API en segundo plano.
Encuentra los datos más recientes en: https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API#browser_compatibility
Hay una razón principal por la que las partes de confianza (relying parties) deben conocer la disponibilidad de Bluetooth si quieren ofrecer passkeys en sus sitios web y aplicaciones.
Una de las características nuevas e innovadoras de las passkeys es la autenticación entre dispositivos (CDA), también conocida como autenticación híbrida. Esta función permite a los usuarios autenticarse en un dispositivo (generalmente un ordenador de sobremesa o portátil) utilizando sus dispositivos móviles a través de códigos QR y Bluetooth. Este método de autenticación híbrida mejora la seguridad y la comodidad, proporcionando una experiencia de usuario fluida. La mayoría de los usuarios no técnicos están hoy en día acostumbrados a escanear códigos QR, ya sea durante la pandemia de COVID para registrarse o a través de aplicaciones de mensajería de prioridad móvil que luego añadieron soporte para escritorio (p. ej., WhatsApp o Telegram).
Decidir una estrategia de CDA es crucial al comienzo de cualquier proyecto de passkeys. Cuanto más dependamos de la CDA, mejor debe ser su soporte y fiabilidad. Por lo tanto, detectar la disponibilidad de Bluetooth en un dispositivo es esencial.
Sin embargo, no todos los dispositivos tienen capacidades Bluetooth o pueden tener el Bluetooth desactivado. Para las partes de confianza (relying parties) que ofrecen passkeys, es esencial detectar la disponibilidad de Bluetooth para determinar si se puede usar la CDA o si es necesario otro método de autenticación de respaldo. La API Web Bluetooth ofrece una solución al permitir que las aplicaciones web verifiquen la disponibilidad de Bluetooth en los dispositivos de los usuarios.
Ten en cuenta que la CDA no siempre es estable y, en ocasiones, puede fallar la conexión sin razones claras. Además, debido a la novedad de la API, a veces la API devuelve resultados incorrectos.
La falta de disponibilidad de la API Web Bluetooth en Firefox y Safari es un problema, especialmente para Firefox.
Safari es un problema menor porque los dispositivos macOS, donde se podría realizar la CDA, han tenido Bluetooth integrado desde los primeros modelos. Sin embargo, si el Bluetooth en macOS no funciona, los usuarios podrían tener problemas con la autenticación entre dispositivos y necesitarían solucionar problemas en su configuración o recurrir a un método de respaldo. Los iPhones que usan Safari han tenido Bluetooth integrado desde su creación.
Sin embargo, Firefox es un problema significativo, ya que es popular en dispositivos Windows. Si un usuario está en Firefox y quiere usar la CDA, la parte de confianza (relying party) no puede determinar de manera fiable si Bluetooth está disponible, ya que la API Web Bluetooth no está implementada. Esto podría resultar en una mala experiencia de usuario, con usuarios que podrían quedarse atascados en ciertos puntos sin saber qué hacer.
Como hemos visto, también en blogs anteriores, los dispositivos Windows se están quedando atrás en términos de adopción de passkeys (ver también State of Passkeys). Echemos un vistazo a qué tan común es la disponibilidad de Bluetooth.
Windows 10 no tiene un requisito estricto de Bluetooth, pero la mayoría de los portátiles y ordenadores de sobremesa modernos vienen con capacidades Bluetooth. Sin embargo, el usuario podría tenerlo desactivado, o podría no estar disponible en algunas configuraciones, especialmente en ordenadores de sobremesa personalizados.
Windows 11, al igual que Windows 10, no exige Bluetooth. Sin embargo, la tendencia hacia un hardware más integrado y moderno significa que la mayoría de los dispositivos compatibles con Windows 11 probablemente tendrán capacidades Bluetooth. Aun así, los usuarios pueden desactivarlo, lo que afecta a las implementaciones de CDA.
En la siguiente tabla puedes ver si es posible determinar si un dispositivo de escritorio está preparado para Bluetooth y, por lo tanto, puede usarse como cliente de CDA:
Sistema operativo | Soporte de hardware Bluetooth | Detección de Bluetooth en el navegador | |||
---|---|---|---|---|---|
Chrome | Edge | Firefox | Safari | ||
Windows 10 | bajo | ✅ | ✅ | ❌ | ❌ |
Windows 11 | medio | ✅ | ✅ | ❌ | ❌ |
macOS | alto | ✅ | ❌ | ❌ | ❌ |
Ten en cuenta que incluso si tu hardware está preparado para Bluetooth, la funcionalidad de Bluetooth podría estar desactivada por el usuario. Cuando Bluetooth está desactivado, el usuario aún puede usar la CDA porque puede optar por activarlo, lo que funciona para Windows y Mac: Solicitud de macOS para activar Bluetooth
Solicitud de Windows 11 para activar Bluetooth
La información sobre la disponibilidad de Bluetooth es especialmente interesante en Windows 10 y Windows 11, donde el soporte de Bluetooth es menor y hay una probabilidad muy alta de que se necesite la autenticación entre dispositivos (en un inicio de sesión basado en passkeys). Los dispositivos macOS recientes todos tienen soporte para Bluetooth. Estos dispositivos macOS también tienen potencialmente acceso directo a las passkeys almacenadas en el Llavero de iCloud, por lo que no son una preocupación.
En Windows 10 y Windows 11: Usa getAvailability()
para averiguar si Bluetooth puede funcionar. En caso de que el usuario solo tenga passkeys que no sean de Windows, puedes recurrir inmediatamente a otras opciones de autenticación.
En una situación en la que solo hay passkeys híbridas disponibles, activar la autenticación con passkey no conducirá a una autenticación exitosa, sino a un callejón sin salida para el usuario. Para todos los demás navegadores en Windows 10 y Windows 11, desafortunadamente, no hay otra forma de averiguar si hay soporte para la CDA.
La API Web Bluetooth representa una herramienta poderosa para mejorar la autenticación con passkeys a través de las capacidades de Bluetooth. Al comprender y aprovechar esta API, los desarrolladores pueden crear métodos de autenticación más seguros y fáciles de usar. Sin embargo, también deben sortear sus limitaciones y garantizar mecanismos de respaldo robustos para mantener una experiencia de usuario fluida en diferentes navegadores y dispositivos.
Con esta entrada de blog, hemos dado respuesta a las tres preguntas principales:
getAvailability()
, getDevices()
y requestDevice()
para verificar el soporte de Bluetooth, listar dispositivos accesibles y solicitar el emparejamiento de dispositivos.Para obtener más información sobre la API Web Bluetooth y una colección de ejemplos, haz clic aquí.
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