Las partes de confianza (RP) pueden determinar qué proveedor de llaves de acceso se crea a través del análisis del AAGUID de la credencial de clave pública asociada.
Desafíos de la administración de llaves de acceso
Uno de los beneficios de usar llaves de acceso es que pueden permitir que los usuarios creen varias llaves de acceso para una sola cuenta. Con esta flexibilidad y la solidez de la llave de acceso, incluso si el usuario no puede acceder a la cuenta por perder una de sus llaves de acceso, puede acceder al usuario de confianza con llaves de acceso alternativas.
El desafío para los usuarios que administran varias llaves de acceso en un RP es identificar la correcta cuando necesiten editar o borrar una específica entre otras. Un buen ejemplo es cuando un usuario quiere quitar una llave de acceso sin usar. Se recomienda que los RP para adjuntar información sobre la llave de acceso, como la fecha de creación y la fecha de último uso, en la lista de llaves de acceso. Esto ayuda a los usuarios a encontrar una llave de acceso específica.
Las RP también pueden permitir que los usuarios asignen un nombre a una llave de acceso tan pronto como se creen o más tarde, pero muchos usuarios no lo hacen. Lo ideal es que los nombres de las llaves de acceso reflejen automáticamente las señales enviadas del cliente o la información incluida en la credencial de clave pública.
Los navegadores proporcionan una cadena de usuario-agente que los usuarios de confianza pueden usar para nombrar llaves de acceso, pero plataformas como Android, iOS o navegadores de escritorio con capacidades de extensión permiten que administradores de contraseñas de terceros creen una llave de acceso, y la cadena de usuario-agente no necesariamente representa quién es el proveedor real de llaves de acceso.
Con el identificador único global de certificación (AAGUID) del Autenticador, que se incluye en la credencial de clave pública que se muestra cuando se registra una llave de acceso, los RP pueden determinar el proveedor de llaves de acceso y usarlo para que los usuarios encuentren fácilmente la llave de acceso correcta.
Determina el proveedor de llaves de acceso con AAGUID
AAGUID es un número único que identifica el modelo del autenticador (no la instancia específica del autenticador). El AAGUID se puede encontrar como parte de los datos de autenticador de una credencial de clave pública.
![Diseño del objeto de certificación que ilustra los datos del autenticador incluidos (con los datos de credenciales certificados) y la declaración de certificación.](https://web.developers.google.cn/static/articles/webauthn-aaguid/image/attestation_object.jpg?authuser=5&hl=es)
Los RP pueden usar AAGUID para identificar al proveedor de la llave de acceso. Por ejemplo, si un usuario crea una llave de acceso en un dispositivo Android con el Administrador de contraseñas de Google, el RP recibirá un AAGUID de "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4"
. El RP puede anotar la llave de acceso en la lista de llaves de acceso para indicar que se creó en el Administrador de contraseñas de Google.
![La configuración de las llaves de acceso en la página de configuración de seguridad muestra información detallada sobre cada llave de acceso.](https://web.developers.google.cn/static/articles/webauthn-aaguid/image/passkey_management.jpg?authuser=5&hl=es)
Para asignar un AAGUID a un proveedor de llaves de acceso, los RP pueden usar un repositorio de AAGUID de origen de la comunidad. Si buscas el AAGUID en la lista, puedes encontrar el nombre del proveedor de la llave de acceso y el texto de datos de SVG de ícono.
La recuperación del AAGUID es una función que proporcionan la mayoría de las bibliotecas de WebAuthn. En el siguiente ejemplo, se muestra el código de registro del servidor con SimpleWebAuthn:
// Import a list of AAGUIDs from a JSON file
import aaguids from './aaguids.json' with { type: 'json' };
...
// Use SimpleWebAuthn handy function to verify the registration request.
const { verified, registrationInfo } = await verifyRegistrationResponse({
response: credential,
expectedChallenge,
expectedOrigin,
expectedRPID,
requireUserVerification: false,
});
...
const { aaguid } = registrationInfo;
const provider_name = aaguids[aaguid]?.name || 'Unknown';
Conclusión
AAGUID es una cadena única que identifica al proveedor de llaves de acceso que la creó. Los RP pueden usar AAGUID para que los usuarios puedan administrar sus llaves de acceso con mayor facilidad. Se puede usar un repositorio de AAGUID de origen de la comunidad para asignar AAGUID a proveedores de llaves de acceso.