Volver al Blog
Identidad

Acceso a dispositivos WebUSB: permisos, interfaces y privacidad

Separa el permiso del selector WebUSB de la disponibilidad del dispositivo, gestiona interfaces protegidas y desconexiones, y evita guardar metadatos USB en registros rutinarios.

BotBrowser Team

Documentación

Quieres la documentación estructurada de Identidad?

Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.

Para un permiso WebUSB nuevo, la acción del usuario debe abrir el selector del navegador; un dispositivo concedido anteriormente también puede devolverse al mismo origin más tarde. Ninguna vía demuestra que el dispositivo esté listo. BotBrowser puede ejecutar una comprobación de capacidad propiedad de la página y su ruta alternativa en un contexto de navegador aprovisionado, pero no proporciona un dispositivo USB, concede acceso al sistema operativo ni demuestra E/S de hardware. Trata abrir el dispositivo, seleccionar una configuración, reclamar una interfaz y completar una operación como resultados separados, y mantén disponible una ruta sin USB.

Una persona inicia una solicitud USB, selecciona en el selector y cruza un límite de acceso hacia una sesión breve; el rechazo o la desconexión vuelven a la ruta alternativa de la página

TL;DR

  • requestDevice() es un paso de permiso mediado por el usuario, no un inventario de dispositivos cercanos.
  • Un dispositivo concedido aún puede no abrirse o no exponer una interfaz reclamable.
  • WebUSB no hace accesibles a una página web ordinaria las clases de interfaz protegidas.
  • Libera las interfaces reclamadas y cierra la sesión al terminar; cerrar no restablece por sí solo el permiso.
  • Guarda el resultado de la tarea, no números de serie ni un historial de dispositivos de larga duración.

Contents

Elegir el acceso en el momento de uso

WebUSB está restringido a contextos seguros y requestDevice() requiere activación transitoria del usuario. Coloca la solicitud detrás de un control con nombre que indique qué hará el dispositivo. El selector permite elegir un dispositivo coincidente y concede acceso al origin; una comprobación de función por sí sola no hace ninguna de las dos cosas. El navegador o Permissions Policy también puede dejar la solicitud indisponible en el documento actual.

navigator.usb.getDevices() puede devolver dispositivos concedidos anteriormente al origin sin abrir un selector nuevo. No enumera todos los dispositivos conectados. Úsalo solo para una tarea clara de usuario recurrente y no trates el resultado como prueba de que el dispositivo sigue conectado. Para una concesión nueva, no abras el selector al cargar la página ni repitas en bucle tras un rechazo. Un selector cancelado debe volver a la página sin perder el borrador de la tarea; ofrece otra solicitud solo después de una nueva acción del usuario.

La relación de permiso no es una conexión. No establece que el dispositivo siga enchufado, que exponga la configuración necesaria ni que una transferencia vaya a funcionar. Informa cada etapa por separado para que la persona sepa si debe volver a seleccionar, reconectar el dispositivo o continuar sin USB.

Separar permiso y disponibilidad

Tras una selección, USBDevice.open() inicia una sesión. La aplicación puede necesitar seleccionar una configuración y reclamar una interfaz antes de comunicarse. Cada operación puede rechazarse por razones distintas de la decisión del selector, como un dispositivo desconectado, una configuración ausente o una interfaz que la API no puede reclamar.

Mantén acotada la acción. Si no se puede reclamar la interfaz requerida, detén esa ruta y explica que el dispositivo no es compatible en este entorno. No amplíes el acceso solicitado ni repitas la selección automáticamente. Un producto que solo necesita una operación permitida no debe pedir más capacidades de las necesarias.

La guía de Playwright de BotBrowser documenta la automatización para flujos propios. En un contexto explícitamente aprovisionado, una prueba puede verificar la rama de capacidad de una página, su mensaje de estado y su ruta alternativa. Eso no hace disponible un dispositivo físico, concede acceso al sistema operativo ni demuestra E/S real. Mantén las aserciones específicas del hardware en un entorno que suministre el dispositivo aprobado.

BotBrowser puede verificar la capacidad y la ruta alternativa de la página, pero no puede proporcionar un dispositivo físico ni demostrar E/S de hardware.

Mantener protegidas las interfaces

Para páginas web ordinarias, la especificación WebUSB bloquea clases de interfaz protegidas, incluidas las habituales de audio, interfaz humana, almacenamiento masivo, hub, tarjeta inteligente, vídeo y controlador inalámbrico. WebUSB no vuelve opcionales esas protecciones de la plataforma. Las reglas especializadas de aplicaciones web aisladas quedan fuera de esta página. Un dispositivo puede seleccionarse mientras una interfaz requerida siga indisponible para una página ordinaria.

Trata una interfaz no disponible o protegida como un límite claro de compatibilidad. No pidas desactivar salvaguardas del sistema operativo ni describas un selector exitoso como aprobación de todas las funciones de un dispositivo compuesto. Si el flujo necesita una interfaz fuera del alcance permitido por WebUSB, usa una ruta nativa o del sistema operativo revisada, con su propio consentimiento y contrato de soporte.

Cerrar el ciclo y minimizar metadatos

Escucha disconnect en navigator.usb; el evento incluye el dispositivo afectado. Al desconectarse físicamente, detén el trabajo dependiente y conserva el borrador. El dispositivo puede estar ya cerrado, así que intenta liberar interfaces y cerrar la sesión como limpieza de mejor esfuerzo, sin informar que alguno sea una liberación física garantizada. Una reconexión debe requerir una acción explícita cuando la página necesite un nuevo intento. Si la tarea termina mientras el dispositivo sigue disponible, libera las interfaces reclamadas y cierra la sesión.

Cerrar una sesión y olvidar un dispositivo son acciones distintas. close() termina la sesión activa y libera las interfaces abiertas. forget() elimina el permiso de la página para ese dispositivo. No digas que cerrar una conexión borró un permiso guardado; explica el control de olvido o la configuración del sitio cuando se necesite revocarlo.

Tras conceder el acceso, USBDevice puede exponer número de serie, nombre de producto, fabricante e identificadores de proveedor o producto. Estos valores pueden distinguir una unidad o modelo. Evita escribirlos en analítica, URL, registros de cuenta, capturas o soporte rutinario. Prefiere un resultado de corta duración como selected, unsupported o disconnected. Si la tarea necesita una etiqueta, deja que la elija la persona y explica su almacenamiento y eliminación.

Clasificar fallos con una tabla de decisión

Clasifica la primera etapa fallida y conserva la misma ruta sin USB. No infieras una causa solo por un timeout.

Etapa observadaQué establecePróxima acción
API ausente, contexto inseguro o restricción de políticaLa página no puede iniciar aquí esta solicitud WebUSBMantén utilizable la tarea y explica la limitación del entorno
Selector rechazado o cerradoNo se devolvió una selección utilizable en este intentoConserva el borrador; espera una nueva acción explícita
Rechazo de open(), configuración o reclamaciónLa selección no produjo una sesión o interfaz utilizableDetén USB, muestra la ruta compatible y no pidas más acceso
Evento de desconexiónTerminó la conexión del dispositivo activoDetén operaciones dependientes, limpia, conserva la entrada y ofrece un reintento deliberado
La operación informa éxitoLa página observó el resultado USB esperadoInforma solo ese resultado; no deduzcas carga, asociación de cuenta ni almacenamiento remoto

El resultado esperado es que cada fila vuelva a un estado comprensible de la página, sin reabrir el selector automáticamente ni registrar identificadores. BotBrowser puede comprobar esos estados propiedad de la página en su contexto declarado; no los convierte en evidencia de una operación con dispositivo real.

Comprobaciones de implementación y privacidad

Separa los estados de la página del permiso, haz idempotente la limpieza asíncrona y prueba cancelación, desconexión e interfaces no compatibles como ramas esperadas. Revisa la telemetría al recopilarla, distingue close() de forget() y publica el navegador, la clase de dispositivo y la operación admitidos. BotBrowser puede verificar estos estados y la ruta alternativa en un contexto de navegador explícitamente configurado, pero no proporciona hardware ni demuestra E/S física.

Conclusión práctica

Usa una acción explícita de selector, separa permiso, sesión y estado de interfaz, y haz predecible la limpieza tras una desconexión. Antes de publicar, verifica un flujo con dispositivo compatible, otro rechazado o no disponible y otro desconectado, cada uno en el entorno que realmente necesita. Mantén completa la tarea normal sin USB y guarda solo el resultado necesario para explicarla.

FAQ

¿Una concesión del selector significa que el dispositivo está conectado?

No. Autoriza al origin a trabajar con el dispositivo seleccionado dentro de los límites de la API y la plataforma. Puede estar desenchufado, no abrirse o carecer de una interfaz reclamable.

¿close() revoca el permiso del sitio?

No. close() termina la sesión actual. Usa forget() o los controles del sitio del navegador para quitar el permiso.

¿Debe una aplicación guardar serialNumber para reconocer el dispositivo?

Solo si existe una necesidad concreta y la persona entiende la retención. El valor puede distinguir una unidad física, por lo que no debe ser un identificador predeterminado de analítica o cuenta.

¿Qué debe mostrar la interfaz cuando falla la preparación?

Debe indicar la primera etapa observada y conservar la ruta de tarea sin USB.

¿Puede BotBrowser probar una operación con el dispositivo físico?

Puede comprobar estados y la ruta alternativa de la página en un contexto aprovisionado, pero no puede proporcionar el dispositivo ni demostrar E/S de hardware.

Sources

Para límites relacionados del navegador, consulta Permissions Policy y capacidades del navegador y privacidad de permisos del navegador.

#WebUSB#Acceso Al Dispositivo#Permisos#Privacidad#API Del Navegador

Lleva BotBrowser de la investigación a producción

Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.