Ваша проблема, судя по всему, связана с требованием системы использовать аппаратный ключ для аутентификации с помощью FIDO2. Windows Hello позволяет использовать как аппаратные средства (например, USB-ключи), так и более программные варианты (например, PIN-код или биометрия). Тем не менее, когда вы запрашиваете `userVerification: "required"`, система может по умолчанию требовать внешние устройства.
### Как включить проверку пароля или PIN вместо USB-ключа
Чтобы использовать PIN-код Windows Hello вместо физического FIDO2-ключа, вам нужно немного изменить конфигурацию вашей аутентификации.
1. **Измените `userVerification`**: Попробуйте использовать значение `"preferred"` вместо `"required"` для `userVerification`. Это позволит системе сначала пытаться проверить пользователя через PIN или биометрию:
```javascript
const publicKey = {
challenge: challengeBytes,
allowCredentials: [{
id: base64ToArrayBuffer(credentialId),
type: "public-key"
}],
userVerification: "preferred", // изменено на "preferred"
authenticatorSelection: {
authenticatorAttachment: 'platform',
residentKey: 'required'
}
};
```
2. **Проверьте настройки Windows Hello**: Убедитесь, что в настройках вашей системы Windows Hello включены методы аутентификации, такие как PIN-код или биометрия.
3. **Не используйте физическое устройство**: Убедитесь, что в вашем коде не указано использование внешнего USB-ключа как единственного метода. Это может ограничить ваше приложение и заставить его требовать физический ключ.
### Пароль в качестве альтернативы
К сожалению, использование пароля в качестве метода аутентификации через `navigator.credentials.get` в контексте WebAuthn и FIDO2 не поддерживается. Эти методы аутентификации ориентированы на использование ключей, Хранителей (объектов аутентификации), и сам процесс не предусматривает работу с традиционным паролем.
Если вы хотите, чтобы пользователи имели возможность входить с помощью пароля, вам нужно реализовать это отдельно в вашем приложении, используя не WebAuthn, а стандартные методы аутентификации через формы для ввода пароля.
Если вас интересуют дальнейшие шаги или возможные альтернативы, пожалуйста, дайте знать!