API de Digital Credentials: Identidad segura y privada en la Web

Publicado: 3 de octubre de 2025

Nos complace anunciar que la API de Digital Credentials ahora está habilitada de forma predeterminada a partir de Chrome 141. Además, iOS 26 agrega compatibilidad con la API de Digital Credentials para Chrome y otros navegadores. Esta API aporta un nuevo nivel de seguridad y privacidad a la verificación de identidad en la Web, lo que permite que los sitios web soliciten y reciban información verificable de los usuarios de una manera estandarizada.

Después de una prueba de origen exitosa, la API de Digital Credentials ahora admite la presentación de credenciales en el mismo dispositivo en Android y la presentación en varios dispositivos en Chrome para computadoras.

Fondo

Hasta ahora, verificar la identidad en línea ha sido un proceso complejo que, a menudo, requiere que los usuarios suban escaneos de sus documentos de identidad. Esta práctica suele implicar compartir más datos de los necesarios, lo que genera importantes preocupaciones de privacidad para los usuarios. Para los desarrolladores, también genera riesgos, ya que deben asegurarse de que su solución sea capaz de procesar y almacenar datos sensibles, a menudo no uniformes, de una manera segura y que preserve la privacidad.

Al mismo tiempo, reglamentaciones como eIDAS 2.0 exigen que los gobiernos proporcionen medios de identificación digital al público. Estas billeteras de identidad digital deben poder contener varias credenciales, incluidas las pruebas de identidad y edad. Los proveedores de servicios en línea pueden solicitar estas credenciales para verificar la identidad del usuario.

La comunidad de estándares web del W3C, que reconoce el potencial de las credenciales digitales para satisfacer tanto las demandas de privacidad de los usuarios como las necesidades de los desarrolladores de verificar los datos de los usuarios, desarrolló una solución: la API de Digital Credentials. La API de Digital Credentials busca abordar el problema con la introducción de una interfaz integrada para verificar la información del usuario, lo que mejora la seguridad, la privacidad y la experiencia del usuario en comparación con las alternativas. Con esta API, los usuarios ya no necesitan subir documentos sensibles, como escaneos de documentos de identidad, a varios sitios web. En cambio, los sitios web pueden generar confianza en sus usuarios solicitando solo los datos específicos firmados criptográficamente que necesitan de emisores confiables.

Funciones principales

La API de Digital Credentials se basa en tres principios fundamentales: privacidad, compatibilidad multiplataforma y estandarización.

Privacidad

La API de Digital Credentials mejora la privacidad y la seguridad en línea. Permite a los usuarios presentar un documento de identidad digital desde sus billeteras para dispositivos móviles a los sitios web para verificar hechos específicos sin divulgar los datos sensibles subyacentes. Por ejemplo, la API puede verificar que un usuario sea mayor de 18 años sin revelar su fecha de nacimiento completa. Este principio de "divulgación selectiva" garantiza que los sitios web solo reciban la información mínima necesaria.

La API de Digital Credentials también es compatible con los protocolos de pruebas de conocimiento cero (ZKP), como Longfellow ZK de Google, que garantiza la privacidad del usuario devolviendo una prueba criptográfica de que una determinada aserción de identidad es verdadera sin revelar ninguna otra información.

Asistencia multiplataforma

El objetivo de la API de Digital Credentials es admitir diferentes plataformas para que los usuarios puedan presentar información verificada de manera conveniente en todos los dispositivos.

En Android: Proporciona una interfaz de usuario integrada que permite a los usuarios seleccionar credenciales de la app de billetera instalada.

En computadoras: Los usuarios pueden presentar credenciales de su billetera móvil en un sitio web en su navegador para computadoras. Cuando escaneas un código QR, el sistema establece una conexión segura, encriptada de extremo a extremo y resistente al phishing entre la computadora y el dispositivo móvil. Esta conexión usa el protocolo CTAP para verificar la proximidad del usuario a través de BLE, lo que garantiza que esté presente físicamente y tenga el control de ambos dispositivos.

Estandarización

La interoperabilidad es clave. En Chrome, la API de Digital Credentials es independiente de la plataforma de protocolos y es compatible con varios protocolos de presentación, por ejemplo, OpenID4VP y el Anexo C de ISO 18013-7. Apple también introdujo compatibilidad con la API de Digital Credentials desde Safari 26.0.

Además, la API de Digital Credentials se basa en la compatibilidad integrada con la administración de credenciales en Android y en un ecosistema cada vez mayor de billeteras compatibles. La Billetera de Google es una de las primeras en adoptar esta tecnología, y Samsung Wallet y 1Password también la admitirán pronto.

¿Qué cambió desde la prueba de origen?

Si participaste en nuestra anterior prueba de origen, notarás que la API de Digital Credentials se trasladó de navigator.identity.get() a navigator.credentials.get(), lo que la alinea con el esfuerzo más amplio de unificación de identidades con la API de Credential Management. Además, se cambió el nombre del parámetro providers a requests y el de request a data.

Implementación

La integración de la API de Digital Credentials implica dos pasos principales: la detección de funciones y la solicitud de la credencial. Los desarrolladores también deben implementar una lógica personalizada para determinar si su aplicación puede usar las credenciales.

Detección de características

Antes de mostrar un botón "Verificar con credencial digital", comprueba si la API de Digital Credentials está disponible en el navegador del usuario.

if (typeof DigitalCredential !== "undefined") {
  // Digital Credentials API is supported
} else {
  // Digital Credentials API is not supported
}

Solicita una credencial

Solicitar una credencial implica una llamada a navigator.credentials.get() con un parámetro digital. Dentro del tipo de credencial digital, agrega un array requests que contenga DigitalCredentialGetRequest con los siguientes parámetros básicos:

  • protocol: Especifica un protocolo de intercambio con una cadena. Por ejemplo,"openid4vp" o "org-iso-mdoc". Para detectar si el navegador admite el protocolo, haz lo siguiente:

    if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) {
        // Create a request with this protocol
      } else {
        // Protocol is not supported
    }
    
  • data: Un objeto con los parámetros que aceptan las apps de billetera digital para el protocolo especificado. En el caso de "openid4vp", los parámetros se definen en OpenID for Verifiable Presentation (OID4VP) para la especificación de la API de credenciales digitales de W3C.

    try {
      const digitalCredential = await navigator.credentials.get({
        digital: {
          requests: [{
            protocol: "openid4vp-v1-unsigned",
            data: {
              response_type: "vp_token",
          nonce: "[some-nonce]",
              client_metadata: {...},
          dcql_query: {...}
            }
        }]
        }
      });
    
      // Decrypt payload respons and verify credentials on the backend
      const response = await fetch("/verify", {
        method: "POST",
          body: JSON.stringify(digitalCredential.data),
          headers: {
              'Content-Type': 'application/json'
          }
      });
    } catch (e) {
      // Handle errors, such as the user canceling the request
      console.error(e);
    }
    

Por ejemplo, para solicitar el apellido, el nombre y un valor booleano que indique si el usuario es mayor de 21 años, puedes especificar la siguiente carga útil:

{
  protocol: 'openid4vp-v1-unsigned',
  data: {
    response_type: 'vp_token',
    nonce: '[some-nonce]',
    // Contains the Verifier metadata values, including supported credential formats and response encryption public key
    client_metadata: {
  // Supported credential formats. Refer to the documentation for specific values
        vp_formats_supported: {...},
   // Public key(s). Refer to the documentation for more detail.
        jwks: {...}
    },
    dcql_query: {
      // A wallet will try to find credentials it holds that match these definitions.
      credentials: [
        {
          // A locally unique identifier for this credential definition within the query.
          id: "cred_vc",
          format: "dc+sd-jwt",
          meta: {
            // 'vct_values' specifies the Verifiable Credential allowed type.
            // In this case, it's a European Digital Identity (EUDI) Personal Identification Data (PID) credential.
            vct_values: [
              "urn:eudi:pid:1"
            ]
          },
          // 'claims' is an array of specific data that's being requested.
          claims: [
            {
              // The path ["age_equal_or_over", "18"] corresponds to accessing `credential.age_equal_or_over['18']`.
              path: [
                "age_equal_or_over",
                "18"
              ]
            }
          ]
        }
      ]
    }
  }
}

En este ejemplo, client_metadata debe especificar una lista de formatos admitidos. Consulta la especificación para ver qué valores se pueden usar. El valor jwks opcional establecido en client_metadata debe contener las claves públicas que se usan para encriptar la respuesta. También puedes consultar el código de demostración para ver más ejemplos.

Este es un ejemplo de una carga útil de respuesta encriptada del objeto DigitalCredential:

{
    // This is an example for a response using an OpenID4VP protocol.
    // The format of the 'data' object will differ for other protocols.
    "protocol": "openid4vp-v1-unsigned",
    "data": {
        // To decrypt this JWE payload, use the private key.
   // The decrypted payload will be a JSON object containing the
       // Verifiable Presentation in the 'vp_token' claim.
        "response": "[jwe-token]"
    }
}

En este ejemplo, el sistema solicita la credencial con el protocolo openid4vp-v1-unsigned y la respuesta contiene response en la propiedad data.

La forma exacta de analizar la respuesta depende del protocolo. Por lo general, debes hacer lo siguiente:

  1. Desencripta la carga útil de la respuesta. El método de desencriptación depende del protocolo que se use. Consulta cómo desencriptar la carga útil para openid4vp (con JWE) y org-iso-mdoc (con encriptación de clave pública híbrida).
  2. Verifica las firmas y el emisor. Para obtener más detalles, consulta la documentación sobre la aceptación en línea de credenciales digitales.

Para ver muestras de código de diferentes protocolos, consulta el código de la demostración o la versión alojada en vivo.

Verifica la confianza en la entidad emisora

La firma criptográfica de las credenciales digitales demuestra que son auténticas. Sin embargo, los desarrolladores deben verificar que la entidad emisora sea adecuada y confiable para su caso de uso específico. Por ejemplo, para otorgar un descuento a un estudiante universitario, un sitio de comercio electrónico requeriría una credencial emitida por una universidad acreditada y rechazaría una credencial firmada por cualquier otra entidad. Una forma común de verificar la confianza en el emisor es mantener una lista de emisores aprobados y rechazar cualquier emisor que no coincida.

Comenzar

¿Estás listo para empezar a realizar compilaciones? Esto es lo que necesitas saber.

  • Disponibilidad: Chrome 141 o versiones posteriores habilitan la API de Digital Credentials de forma predeterminada en diferentes plataformas.
  • Requisitos previos: Los usuarios necesitan un dispositivo compatible, por ejemplo, Android con la versión 24.0 o posterior de los Servicios de Google Play, o un dispositivo iOS con la versión 26 o posterior. El dispositivo debe tener instalada una aplicación de billetera digital que admita la API de Digital Credentials, por ejemplo, la Billetera de Google o una billetera de demostración.
  • Prueba la demostración: La mejor manera de comprender la experiencia del usuario y probar tu implementación es probar la demostración en vivo en https://verifier.multipaz.org con Chrome 141 o una versión posterior.

Recursos

Para obtener más información, consulta los siguientes recursos:

Comparte tus comentarios

Ahora que se lanzó la API de Digital Credentials, nos gustaría conocer tu experiencia con ella. Informa un problema para compartir tus comentarios o informar errores.