As partes confiáveis (RPs) podem determinar qual provedor de chave de acesso criou uma chave de acesso examinando o AAGUID da credencial de chave pública associada.
Desafios com o gerenciamento de chaves de acesso
Um dos benefícios do uso de chaves de acesso é que elas permitem 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 seja bloqueado da conta por perder uma das chaves, ele ainda pode 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 chave 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 anexem 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.
Os RPs também podem permitir que os usuários nomeiem uma chave de acesso assim que ela é criada ou depois, mas muitos usuários não fazem isso. O ideal é que as chaves de acesso sejam nomeadas automaticamente, refletindo os sinais enviados pelo 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 de computador com recursos de extensão permitem a criação de uma chave de acesso por gerenciadores de senhas de terceiros, e a string de user agent não representa necessariamente quem é o provedor de chave de acesso.
Com o identificador globalmente exclusivo de 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 usá-lo para que os usuários encontrem facilmente a chave de acesso correta.
Determinar o provedor de chave de acesso com AAGUID
O 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.
Os RPs podem usar o AAGUID para identificar o provedor de 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.
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.
A maioria das bibliotecas da WebAuthn oferece o recurso de extrair o AAGUID. O exemplo a seguir mostra o código de registro do lado do servidor usando o 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 de chave de acesso 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 originado pela comunidade pode ser usado para mapear AAGUIDs para provedores de chaves de acesso.