Я сомневаюсь. Я установил полное решение для ключей Yubico U2F. Но теперь я не могу остановить двойную регистрацию одного и того же устройства для пользователя с одним и тем же идентификатором приложения. При проверке дескрипторов ключей в моей базе данных они показывают разные значения для каждой дублирующейся регистрации. Пожалуйста, помогите мне.
Повторная регистрация одного и того же устройства Yubikey U2F
Ответы (1)
Если вы используете WebAuthn API, вы можете отправить все уже зарегистрированные ключи клиенту при попытке добавить новый ключ с помощью ключа «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"
]
}
]
}
}
Когда браузер обнаружит, что пользователь пытается зарегистрировать уже зарегистрированный ключ, он предложит пользователю попробовать другой ключ, и запрос вообще не будет отправлен на сервер.