Determinar o provedor da chave de acesso com o AAGUID

As partes confiáveis (RPs) podem determinar por qual provedor uma chave de acesso foi 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 permitem que os usuários criem várias chaves para uma única conta. Com essa flexibilidade e a robustez da chave de acesso, mesmo que o usuário perca uma das chaves e não consiga acessar a conta, 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 um RP é identificar a chave certa quando precisam editar ou excluir uma específica entre outras. Um bom exemplo é quando um usuário quer remover uma chave de acesso não utilizada. Recomendamos que os RPs anexem informações sobre a chave de acesso, como data de criação e data da última utilização na lista de chaves de acesso. Isso ajuda os usuários a encontrar uma chave de acesso específica.

Os RPs também podem permitir que os usuários nomeiem 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 automaticamente, refletindo os indicadores enviados pelo cliente ou as informações incluídas na credencial de chave pública.

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

Com o identificador exclusivo global do atestado do autenticador (AAGUID, na sigla em inglês), incluído na credencial de chave pública retornada em um registro de chave de acesso, os RPs podem determinar o provedor de chave de acesso e ajudar os usuários a encontrar a chave certa.

Determinar o provedor de chaves de acesso com AAGUID

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

Layout do objeto de declaração ilustrando os dados do autenticador incluídos (contendo dados de credenciais atestadas) 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 de chaves de acesso. Por exemplo, se um usuário criar uma chave de acesso em um dispositivo Android usando o Gerenciador de senhas do Google, o 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 de chave de acesso na página de configurações de segurança mostram informações detalhadas sobre cada chave.
Um exemplo de interface de gerenciamento de chaves de acesso.

Para mapear um AAGUID a um provedor de chaves de acesso, os RPs podem usar um repositório de AAGUIDs de origem da comunidade. Ao pesquisar o AAGUID na lista, é possível encontrar o nome do provedor de chaves de acesso e o texto de dados svg do ícone.

A recuperação do AAGUID é um recurso oferecido pela maioria das bibliotecas WebAuthn. 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 que criou uma chave de acesso. Os RPs podem usar o AAGUID para facilitar o gerenciamento das chaves de acesso pelos usuários. Um repositório de AAGUIDs de origem da comunidade pode ser usado para mapear AAGUIDs a provedores de chaves de acesso.