Опубликовано: 09 мая 2025 г., Последнее обновление: 22 декабря 2025 г.
Пароли обеспечивают надежную аутентификацию, устойчивую к фишингу. Однако убедить пользователей использовать их может быть непросто. Автоматическое создание паролей позволяет создавать пароли для пользователей в нужный момент, при условии, что у них уже сохранен пароль для вашего сайта. Функция Conditional Create, которая обеспечивает автоматическое создание паролей, является частью спецификации WebAuthn.
Как это работает
Чтобы упростить пользователям ввод паролей, используйте функцию WebAuthn API под названием «Условное создание» . «Условное создание» позволяет вашему сайту запрашивать пароль у пользователя без каких-либо действий с его стороны.
Данный алгоритм работает при соблюдении следующих условий:
- У пользователя сохранен пароль в менеджере паролей по умолчанию.
- Пароль был использован совсем недавно. В идеале, вызовите функцию Conditional Create сразу после успешного входа в систему с использованием пароля.
Если оба условия выполнены, вы можете запросить у менеджера паролей создание пароля для пользователя, вызвав функцию Conditional Create. После успешного создания пароля пользователь получает уведомление в зависимости от используемого менеджера паролей.
Совместимость
Функция Conditional Create поддерживается браузером Safari на macOS и всеми браузерами на iOS , а также Chrome на настольных компьютерах и Chrome на Android .
Благодаря этой поддержке, приложение работает с соответствующими стандартными поставщиками паролей: iCloud Keychain (Passwords) в Safari на macOS и iOS, а также Google Password Manager в Chrome на настольных компьютерах и Android.
Поскольку iOS 18 и более поздние версии, а также Android 14 и более поздние версии поддерживают сторонние поставщики ключей доступа, независимо от используемого пользователем браузера, поддержка условного создания зависит от поставщика ключей доступа. Если выбранный поставщик ключей доступа не поддерживает условное создание, новый ключ доступа не будет создан.
Реализуйте условное создание
Автоматическое создание ключа доступа основано на функции API WebAuthn, называемой «Условное создание» . Это обычные запросы WebAuthn create() с параметром mediation , установленным в значение "conditional" , что работает аналогично автоматическому заполнению ключа доступа для запросов get() .
Используйте условное создание после того, как пользователь войдет в систему с помощью пароля. Успех создания зависит от менеджера паролей и выполнения определенных условий. Эти условия могут различаться в зависимости от менеджера паролей и могут меняться со временем. Например, в Chrome с Google Password Manager (GPM) пользователь должен был недавно войти на сайт, используя сохраненный пароль.
Если браузер успешно создаст пароль, он вернет учетные данные в виде открытого ключа. Отправьте эти учетные данные на свой бэкэнд для завершения регистрации и включения аутентификации в будущем.
Обнаружение признаков
Вы можете определить, доступна ли функция Conditional Create в браузере, вызвав метод PublicKeyCredential.getClientCapabilities() . Проверьте, содержит ли возвращаемый объект true для свойства conditionalCreate .
if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.conditionalCreate) {
// Conditional create is available
}
}
Если getClientCapabilities недоступна, то и функция Conditional Create также недоступна.
Создать пароль в зависимости от условий
Для автоматического создания пароля вызовите метод navigator.credentials.create() , но с mediation: "conditional" как показано ниже.
const cred = await navigator.credentials.create({
publicKey: options,
// Request conditional creation
mediation: 'conditional'
});
Для обеспечения максимальной вероятности соответствия критериям менеджера паролей для автоматического создания паролей следует использовать автоматическое создание ключей доступа сразу после входа пользователя в систему.
Полученные учетные данные открытого ключа можно отправить на сервер для проверки и регистрации пароля . На сервере убедитесь, что пользователь авторизован.
Предостережения
Функция условного создания сама по себе несложна в реализации, но при фактической интеграции этой функции в существующую систему следует учитывать ряд нюансов.
Игнорировать присутствие пользователя и проверку пользователя на сервере.
В ответе на запрос регистрации возвращаются значения false для параметров "User Presence" и "User Verified", поэтому сервер должен игнорировать эти флаги во время проверки учетных данных .
Прервать текущий вызов WebAuthn перед автоматическим созданием пароля.
Когда RP ожидает, что пользователь войдет в систему либо с помощью пароля, либо с помощью ключа доступа, наилучшим вариантом будет выполнение условного запроса GET . Это может привести к отмене вызова условного запроса GET до выполнения условного запроса CREATE.
Для этого необходимо использовать AbortController и вызвать метод .abort() .
// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();
const cred = await navigator.credentials.get({
publicKey: options,
signal: controller.signal,
// Request conditional get
mediation: 'conditional'
});
// Abort the call
controller.abort();
Не обращайте внимания на исключения.
При создании условного ключа доступа следует игнорировать несколько исключений:
-
InvalidStateError: В поставщике ключей паролей уже существует ключ (не забудьте указатьexcludeCredentials). -
NotAllowedError: Создание ключа доступа не соответствует условию. -
AbortError: Вызов WebAuthn прерван.
Отображение ошибок в таких случаях может ввести пользователя в заблуждение, поскольку браузер обрабатывает их незаметно: уведомление отображается только при успешном выполнении, а при сбоях видимые сообщения не появляются.
Сигнал при сбое регистрации пароля
Если ключ доступа создан, но не зарегистрирован на сервере, пользователь столкнется с неудачной попыткой входа в систему. Это может произойти, если список ключей доступа не совпадает у поставщика ключей и на сервере.
Чтобы избежать подобных ситуаций, используйте API Signal для обеспечения их согласованности .
Переход с беспарольного входа в систему не поддерживается.
На данном этапе создание условного ключа доступа осуществляется только после ввода пользователем действительного пароля. Это означает, что беспарольные способы входа в систему, такие как «магические ссылки», проверка номера телефона или федерация идентификации, не будут соответствовать этому условию.
Краткое содержание
Автоматическое создание паролей может ускорить внедрение паролей на вашем веб-сайте, помогая пользователям перейти от паролей к более безопасному методу аутентификации.
Чтобы узнать больше о паролях, начните с раздела «Вход без пароля с помощью паролей» .