Если вы используете API WebAuthn, вы можете отправить все уже зарегистрированные ключи клиенту при попытке добавить новый ключ, используя ключ «excludeCredentials».Эти учетные данные будут отформатированы так же, как при попытке войти в систему.
excludeCredentials - содержит список учетных данных, которые уже были зарегистрированы для пользователя.Этот список затем передается аутентификатору, и если аутентификатор распознает любой из них, он отменяет операцию с ошибкой CREDENTIAL_EXISTS, предотвращая тем самым двойную регистрацию одного и того же аутентификатора.
Источник: https://medium.com/@herrjemand/introduction-to-webauthn-api-5fd1fb46c285
Примером JSON, который клиент получает при добавлении нового ключа, может быть:
{
"publicKey":{
"rp":{
"name":"YourApp",
"id":"YourAddress"
},
"authenticatorSelection":{
"userVerification":"preferred"
},
"user":{
"id":"UserId",
"name":"Username",
"displayName":"displayName"
},
"pubKeyCredParams":[
{
"type":"public-key",
"alg":-7
}
],
"attestation":"direct",
"extensions":{
"exts":true
},
"timeout":20000,
"challenge":"...",
"excludeCredentials":[
{
"id":"...",
"type":"public-key",
"transports":[
"usb",
"ble",
"nfc",
"internal"
]
},
{
"id":"...",
"type":"public-key",
"transports":[
"usb",
"ble",
"nfc",
"internal"
]
}
]
}
}
Когда браузер обнаруживает, чтопользователь пытается зарегистрировать ключ, который уже был зарегистрирован, он скажет пользователю попробовать другой ключ, и запрос вообще не будет отправлен на сервер.