Detección de funciones de WebAuthn más simple

Fecha de publicación: 15 de enero de 2025. Fecha de última actualización: 9 de abril de 2026

WebAuthn proporciona capacidades únicas, como la interacción con Bluetooth para el protocolo híbrido, la comunicación con proveedores de llaves de acceso y la sugerencia de llaves de acceso en el autocompletado. Sin embargo, los diferentes clientes y autenticadores ofrecen distintos niveles de compatibilidad con las funciones de WebAuthn. Esta disparidad puede generar una experiencia del usuario fragmentada, en la que algunos usuarios pueden encontrar errores o no poder utilizar ciertas opciones de autenticación. Proporcionar una forma para que los desarrolladores determinen las capacidades del cliente les permite crear flujos de autenticación más sólidos que se adapten a estas variaciones.

El método PublicKeyCredential.getClientCapabilities() permite que los usuarios de confianza determinen qué funciones de WebAuthn son compatibles con el navegador. El método muestra una promesa que se resuelve en una lista de capacidades compatibles, lo que permite a los desarrolladores adaptar las experiencias y los flujos de trabajo de autenticación en función de las capacidades específicas del cliente.

Compatibilidad

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities() es una API de WebAuthn que permite que los usuarios de confianza determinen qué capacidades están disponibles. Para usar la API, debes llamar a PublicKeyCredential.getClientCapabilities(). La promesa que se muestra se resuelve en un objeto que contiene capacidades, cada una de las cuales indica su disponibilidad con true o false. Si la capacidad es undefined, considera que no se conoce su disponibilidad.

if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
  const capabilities = await PublicKeyCredential.getClientCapabilities();
  if (capabilities.conditionalGet === true &&
      capabilities.passkeyPlatformAuthenticator === true) {
    // The browser supports passkeys and the conditional mediation.
  }
}

conditionalCreate

El navegador puede crear una credencial sin una IU modal destacada si el usuario ya dio su consentimiento para crear una.

conditionalGet

El navegador puede autenticarse mostrando llaves de acceso como parte del diálogo de autocompletado, en lugar de una IU modal destacada. El equivalente existente es PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

El dispositivo puede usar Bluetooth para que el navegador pueda crear una credencial y autenticarse con ella en varios dispositivos mediante el protocolo híbrido. Por lo general, esto significa que el navegador puede mostrar un código QR para que el usuario pueda escanearlo y acceder con un teléfono que tenga una credencial.

passkeyPlatformAuthenticator

El navegador puede crear una credencial y autenticarse con ella a través de un autenticador de plataforma de verificación de usuario o de otro dispositivo que la admita a través del protocolo híbrido. Equivale a hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

El navegador puede crear una credencial y autenticarse con ella que no coincida con el ID de RP, siempre que se especifique en el archivo de orígenes relacionados.

signalAllAcceptedCredentials

El navegador puede indicar las credenciales disponibles en el servidor al proveedor de llaves de acceso, de modo que el proveedor de llaves de acceso pueda mantener la lista de llaves de acceso coherente con el servidor.

signalCurrentUserDetails

El navegador puede indicar información del usuario, como el nombre de usuario y el nombre visible en el servidor al proveedor de llaves de acceso, de modo que el proveedor de llaves de acceso pueda mantener su información de llaves de acceso coherente con el servidor.

signalUnknownCredential

El navegador puede indicar una credencial borrada en el servidor al proveedor de llaves de acceso , de modo que el proveedor de llaves de acceso pueda mantener la lista de llaves de acceso coherente con el servidor.

userVerifyingPlatformAuthenticator

El navegador puede crear una credencial en un autenticador de plataforma y autenticarse con ella. Esto no significa que el navegador admita el protocolo híbrido. El equivalente existente es PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

extensions

Los RPs también pueden determinar las extensiones disponibles con getClientCapabilities().

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

El identificador tiene el prefijo extension: seguido de un nombre de extensión. Consulta los identificadores de extensión de WebAuthn definidos en IANA para obtener nombres de extensión.

Más información

Para obtener más información sobre las llaves de acceso, comienza con Acceso sin contraseña con llaves de acceso.