Рабочий процесс:
Пользователь запускает регистрацию.
Серверная сторона: все существующие учетные данные для этого пользователя помечаются как удаленные в БД.
Сервер возвращает пустой массив [] для исключенияCredentials.
Клиентская сторона: navigator.credentials.create() вызывается с пустым значением список ignoreCredentials.
Проблема:
Несмотря на то, что ignoreCredentials представляет собой пустой массив, браузер (Chrome на Android/Windows) обнаруживает, что ключ доступа с таким же user.id уже существует на устройстве/в облачном хранилище. Вместо того, чтобы приступить к созданию новых учетных данных, он предлагает пользователю: «Хотите ли вы использовать сохраненный ключ доступа?» Это парадокс: пустое исключениеCredentials должно означать «не блокировать создание», но браузер интерпретирует его как приглашение предложить существующие ключи, что разрушает UX «Новой регистрации».
Код: Выделить всё
const publicKeyCredentialCreationOptions = {
publicKey: {
rp: { id: "lenoire.co.kr", name: "LENOIRE" },
user: {
id: Uint8Array.from("USER_ID_FROM_DB", c => c.charCodeAt(0)),
name: "user@lenoire.co.kr",
displayName: "TeamLeader"
},
challenge: Uint8Array.from(atob(serverChallenge), c => c.charCodeAt(0)),
pubKeyCredParams: [{ type: "public-key", alg: -7 }],
excludeCredentials: [], // Explicitly empty to allow re-registration
authenticatorSelection: {
authenticatorAttachment: "platform",
userVerification: "required",
residentKey: "discouraged"
}
}
};
// Verified: excludeCredentials is truly [] before this call
await navigator.credentials.create({ publicKey: publicKeyCredentialCreationOptions });
Почему браузер/операционная система предлагает существующие учетные данные, даже если параметр ignoreCredentials пуст, а ключи были вручную удалены из диспетчера паролей? Существует ли скрытый кеш или особое поведение residentKey, которое вызывает этот пользовательский интерфейс?
[Вопрос]
Почему браузер/операционная система предлагает существующие учетные данные, даже если исключаемые учетные данные пусты, а ключи были удалены вручную из диспетчера паролей? Существует ли скрытый кеш или особое поведение residentKey, которое вызывает этот пользовательский интерфейс?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ed-passkey
Мобильная версия