Determinar o provedor da chave de acesso com o AAGUID

As partes confiáveis (RPs, na sigla em inglês) podem determinar em qual provedor de chaves de acesso uma chave de acesso será criada examinando o AAGUID da credencial de chave pública associada.

Desafios com o gerenciamento de chaves de acesso

Um dos benefícios de usar chaves de acesso é que elas podem permitir que os usuários criem várias chaves para uma única conta. Com essa flexibilidade e a robustez das chaves de acesso, mesmo que o usuário perca o acesso à conta por perder uma delas, ele ainda poderá fazer login na parte confiável usando chaves de acesso alternativas.

O desafio para os usuários que gerenciam várias chaves de acesso em uma parte restrita é identificar a correta quando eles precisarem editar ou excluir uma específica. Um bom exemplo é quando um usuário quer remover uma chave de acesso não utilizada. Recomendamos que as RPs anexem informações sobre a chave de acesso, como data de criação e data do último uso, na lista de chaves de acesso. Isso ajuda o usuário a encontrar uma chave de acesso específica.

As RPs também podem permitir que os usuários nomeem uma chave de acesso assim que ela for criada ou depois, mas muitos usuários não fazem isso. O ideal é que as chaves de acesso sejam nomeadas refletindo automaticamente os sinais enviados pelo cliente ou as informações incluídas na credencial da chave pública.

Os navegadores fornecem uma string de user agent que as partes confiáveis podem usar para nomear chaves de acesso, mas plataformas como navegadores Android, iOS ou computadores com recursos de extensão permitem criar uma chave de acesso por gerenciadores de senhas de terceiros, e a string do user agent não representa necessariamente quem é o provedor da chave de acesso.

Com o identificador globalmente exclusivo do atestado do Authenticator (AAGUID, na sigla em inglês), incluído na credencial de chave pública retornada em um registro da chave de acesso, os RPs podem determinar o provedor da chave de acesso e usá-lo para que os usuários encontrem facilmente a chave de acesso correta.

Determinar o provedor da chave de acesso com o AAGUID

AAGUID é um número exclusivo que identifica o modelo do autenticador, e não a instância específica dele. O AAGUID pode ser encontrado como parte dos dados do autenticador de uma credencial de chave pública.

Layout do objeto de atestado que ilustra os dados do autenticador incluídos (que contêm dados de credenciais atestados) e a declaração de atestado.
O AAGUID pode ser encontrado nos dados do autenticador.

Os RPs podem usar o AAGUID para identificar o provedor da chave de acesso. Por exemplo, se um usuário criar uma chave de acesso em um dispositivo Android usando o Gerenciador de senhas do Google, a RP vai receber um AAGUID de "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4". O RP pode anotar a chave de acesso na lista para indicar que ela foi criada no Gerenciador de senhas do Google.

As configurações da chave de acesso na página de configurações de segurança mostram informações detalhadas sobre cada chave de acesso.
Exemplo de interface de gerenciamento de chaves de acesso.

Para mapear um AAGUID para um provedor de chave de acesso, as partes restritas podem usar um repositório de AAGUIDs criado pela comunidade. Ao procurar o AAGUID na lista, o nome do provedor da chave de acesso e o ícone de texto de dados svg podem ser encontrados.

A recuperação do AAGUID é um recurso que a maioria das bibliotecas do WebAuthn fornece. O exemplo a seguir mostra o código de registro do lado do servidor usando 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';

Conclusão

O AAGUID é uma string exclusiva que identifica o provedor da chave de acesso que a criou. Os RPs podem usar o AAGUID para facilitar o gerenciamento das chaves de acesso pelos usuários. Um repositório de AAGUIDs fornecido pela comunidade pode ser usado para mapear AAGUIDs para provedores de chaves de acesso.