Detección de funciones de WebAuthn más simple con getClientCapabilities()

Publicado el 15 de enero de 2025

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 pueden 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 admite el navegador. El método devuelve una promesa que se resuelve en una lista de capacidades admitidas, 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()

La API de 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 devuelta 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 &&
  if (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 cree una credencial y se autentique con ella en varios dispositivos a través del protocolo híbrido. Por lo general, esto significa que el navegador puede mostrar un código QR para que el usuario lo escanee y acceda 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 que verifique al 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 y cuando 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 enviar información del usuario, como el nombre de usuario y el nombre visible, al servidor del proveedor de llaves de acceso para que este pueda mantener la información de sus llaves de acceso coherente con el servidor.

signalUnknownCredential

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

userVerifyingPlatformAuthenticator

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

extensiones

Los RP 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 extensiones de WebAuthn definidos en IANA para conocer los nombres de las extensiones.

Más información

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