Determinar o provedor da chave de acesso com o AAGUID

As partes confiáveis (RPs, na sigla em inglês) podem determinar qual provedor de chave de acesso 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 podem permitir que os usuários criem várias chaves de acesso para uma única conta. Com essa flexibilidade e a robustez da chave 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 precisarem editar ou excluir uma específica entre outras. Um bom exemplo é quando um usuário quer remover uma chave de acesso não utilizada. É recomendável que as RPs anexe informações sobre a chave de acesso, como a data de criação e a data do último uso na lista de chaves de acesso. Isso ajuda os usuários a encontrar uma chave de acesso específica.

As 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 do cliente ou as informações incluídas na credencial de 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 Android, iOS ou navegadores para computador 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 de chave de acesso real.

Com o identificador universalmente exclusivo do atestado do Authenticator (AAGUID, na sigla em inglês), incluído na credencial de chave pública retornada em um registro de chave de acesso, as 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, 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 ilustrando os dados do autenticador incluídos (contendo 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, 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 da chave de acesso na página de configurações de segurança mostram informações detalhadas sobre cada uma delas.
Um exemplo de interface de gerenciamento de chaves de acesso.

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

Recuperar o AAGUID é um recurso que a maioria das bibliotecas WebAuthn oferece. 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 a 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 originado pela comunidade pode ser usado para mapear AAGUIDs para provedores de chaves de acesso.