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

Fecha de publicación: 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 diferentes 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 usar 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 las partes 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 admitidas, lo que permite a los desarrolladores adaptar las experiencias de autenticación y los flujos de trabajo en función de las capacidades específicas del cliente.

Compatibilidad

Browser Support

  • Chrome: not supported.
  • Edge: not supported.
  • Firefox: not supported.
  • Safari: 17.4.

getClientCapabilities()

getClientCapabilities() es una API de WebAuthn que permite que las partes de confianza determinen qué funciones 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 capability es undefined, considera que su disponibilidad no se conoce.

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 autenticar 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 con el 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 que se especifique en el archivo de orígenes relacionado.

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 la información de la llave 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 la 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 extensión de WebAuthn definidos en la IANA para ver los nombres de las extensiones.

Más información

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