Узнайте, как WebAuthn Signal API обеспечивает бесшовное удаление Passkeys и обновление метаданных (user.name, user.displayName) на аутентификаторах на стороне клиента.
Vincent
Created: August 8, 2025
Updated: January 22, 2026

See the original blog version in English here.

Looking for a dev-focused passkey reference? Download our Passkeys Cheat Sheet. Trusted by dev teams at Ally, Stanford CS & more.
Последнее обновление: 4 ноября 2025 г.
Краткий обзор поддержки WebAuthn Signal API на различных платформах:
| Платформа | Поддержка в вебе | Нативная поддержка |
|---|---|---|
| Windows | ✅ Chrome + Google Password Manager | Н/Д |
| macOS | ✅ Safari 26+ (iCloud Keychain) | Н/Д |
| iOS | ✅ Safari 26+ (iCloud Keychain) | ✅ iOS 26+ (WWDC 2025 Session 279) |
| Android | 🧪 Chrome 143 (Beta) | 🧪 Credential Manager Alpha (v1.6.0-alpha05; beta в v1.6.0-beta03) |
⚠️ Известная проблема: В Safari 26+ есть баг, из-за которого промис не разрешается должным образом (WebKit Bug #298951). Исправление ожидает слияния.
Экосистема Passkeys постоянно развивается. Чтобы способствовать этим изменениям, базовый стандарт WebAuthn тоже не стоит на месте. Новые функции часто начинаются с технического пояснения (explainer) на GitHub, а затем, после достаточного обсуждения, превращаются в pull request к стандарту. Недавно этот pull request был добавлен в черновик стандарта как WebAuthn Signal API. В этой статье мы разберем:
На момент написания статьи WebAuthn Signal API включен по умолчанию начиная с Chrome 132. Ранее он был известен как Reporting API, но был переименован, чтобы избежать конфликтов с другим API с таким же названием.
WebAuthn Signal API решает специфические задачи, связанные с управлением Passkeys на стороне клиента. В частности, он помогает поддерживать синхронизацию информации между Relying Party (RP) и аутентификаторами, которые являются частью операционных систем на стороне клиента. Существуют следующие важные сценарии использования:
Subscribe to our Passkeys Substack for the latest news.
При создании Passkey он включает несколько элементов информации: user.id, user.name и
user.displayName. Сам Passkey идентифицируется с помощью уникального
Credential ID.
user.id критически важен, так как он используется для фактического сопоставления
Passkey с аккаунтом пользователя.На следующей иллюстрации показана типичная простая структура базы данных, поясняющая, какая информация обычно хранится в каком поле:
Важно понимать, что хотя user.name (часто адрес электронной почты) и user.displayName
(более дружелюбное, читаемое имя) помогают пользователю идентифицировать свой аккаунт в
интерфейсе выбора, реальная связь между Passkey и аккаунтом поддерживается через
user.id и Credential ID:
user.id.Проблема возникает, когда user.name, которым может быть адрес электронной почты,
меняется. В настоящее время не существует механизма для обновления этого изменения
непосредственно на аутентификаторе на стороне клиента.
user.name может измениться по разным причинам, например, если пользователь обновил свой
email. Несмотря на это изменение в метаданных аккаунта на стороне сервера, старое
user.name продолжит отображаться в интерфейсе выбора учетных данных, что может сбить
пользователя с толку.
Обходной путь для этой проблемы — создать новый Passkey с обновленным user.name и тем же
user.id, а затем перезаписать существующий Passkey. Однако этот подход неудобен по
нескольким причинам:
user.id для
конкретного ID Relying Party. Это означает, что старый
Passkey нужно заменить новым только для обновления метаданных, что является лишним
шагом.Email-адреса, номера телефонов и другие идентификаторы могут регулярно меняться. Без
прямого метода обновления user.name и user.displayName непосредственно на
аутентификаторе, пользователи могут столкнуться с постоянной проблемой, когда они видят и
вынуждены выбирать Passkey, связанный со старым email. Эта ситуация подрывает бесшовный
опыт, который призваны обеспечить Passkeys. WebAuthn Signal API нацелен решить эту
проблему, позволяя Relying Parties сообщать об обновлении метаданных Passkeys без
необходимости создания новых. Прежде чем мы объясним, как внедрить Signal API, давайте
рассмотрим второй важный сценарий использования.
Become part of our Passkeys Community for updates & support.
Другой важный сценарий — удаление Passkeys на аутентификаторе на стороне клиента. Со временем пользователи могут отозвать учетные данные через список управления Passkeys или удалить свои аккаунты. В таких случаях необходимо убедиться, что эти учетные данные удалены с клиентского аутентификатора, чтобы предотвратить их появление в будущих интерфейсах выбора (Conditional UI / автозаполнение Passkey).
Потребность в этой функциональности возникает в нескольких ситуациях:
С точки зрения пользователя трудно понять, что удаление в настройках аккаунта (в диалоге, подобном приведенному выше) не приводит к удалению Passkey на этом клиенте.
Без прямого метода удаления Passkeys на стороне клиента эти устаревшие или недействительные учетные данные продолжают загромождать интерфейс выбора, вызывая путаницу. Пользователи могут видеть и пытаться использовать Passkeys, которые больше не работают, что приводит к неудачным попыткам аутентификации и плохому UX.
Посмотрите это видео о том, как удалить Passkeys на стороне сервера в консоли управления Corbado Connect:
Внедрение WebAuthn Signal API включает несколько шагов и соображений для обеспечения корректной и безопасной интеграции. Signal API позволяет Relying Parties (RP) обновлять или удалять Passkey на аутентификаторе на стороне клиента. В этом разделе описаны ключевые моменты и шаги для реализации.
При внедрении WebAuthn Signal API крайне важно помнить о следующем:
Эти соображения необходимы для понимания наиболее важных аспектов корректной работы WebAuthn Signal API.
WebAuthn Signal API предоставляет упрощенный механизм для Relying Parties (RP) по обновлению метаданных, связанных с Passkeys на клиентских аутентификаторах. Это особенно важно для того, чтобы пользователи видели точную и актуальную информацию в интерфейсе выбора учетных данных без необходимости создавать новые Passkeys. Вот как API позволяет это сделать:
Обновление метаданных с помощью signalCurrentUserDetails(options)
Метод signalCurrentUserDetails(options) в Signal API специально разработан для
обновления метаданных Passkeys. Этот метод позволяет RP предоставить текущие значения для
user.name и user.displayName.
Вот как работает процесс (см. также стандарт WebAuthn Level 3):
signalCurrentUserDetails(options) включает rp.id,
user.id и обновленные значения для user.name и user.displayName.PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "aabbcc", // user handle, base64url. name: "New user name", displayName: "New display name", });
rpId и userId. Для всех совпадающих учетных данных
аутентификатор обновит name и displayName.signalCurrentUserDetails(options), RP могут гарантировать, что метаданные для
Passkeys остаются согласованными на разных устройствах и платформах, где пользователь
может аутентифицироваться. Такой подход снижает вероятность отображения устаревшей или
неверной информации в интерфейсе выбора.На скриншоте выше видно, как Google Chrome сигнализирует пользователю о таком обновлении. WebAuthn Signal API является частью Chrome и может быть протестирован с помощью Google Password Manager на десктопе.
WebAuthn Signal API предоставляет механизмы для Relying Parties (RP), чтобы
сигнализировать об удалении Passkeys с клиентских
аутентификаторов. Это необходимо для того, чтобы устаревшие или
недействительные учетные данные не появлялись в интерфейсе выбора, поддерживая тем самым
удобный и безопасный пользовательский опыт. Существует два метода для локального удаления
Passkeys: signalUnknownCredential(options) и signalAllAcceptedCredentials(options).
Первый можно использовать в ситуациях, когда пользователь не аутентифицирован, тогда как
второй можно использовать, когда пользователь аутентифицирован. Поэтому второй метод
предпочтительнее по соображениям конфиденциальности.
Вот как работают эти два метода:
signalUnknownCredential(options) включает rpId (ID
Relying Party) и credentialId (уникальный идентификатор удаляемой учетной записи).PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "aabbcc", // credential id, который пользователь только что попробовал, base64url });
signalUnknownCredential(options) клиентский
аутентификатор пытается найти учетные данные, соответствующие rpId и указанному
credentialID, для исключения. В зависимости от возможностей
аутентификатора, учетные данные либо удаляются, либо
используется специфичная для аутентификатора процедура их скрытия в будущих церемониях
аутентификации.signalAllAcceptedCredentials(options) включает rpId (ID
Relying Party), userId и список действительных Credential ID
allAcceptedCredentialIds (список уникальных идентификаторов учетных данных, которые
следует сохранить).PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "aabbcc", // user handle, base64url. allAcceptedCredentialIds: ["bb"], });
signalUnknownCredential(options) для удаления учетных данных.signalAllAcceptedCredentials(options) клиентский
аутентификатор сопоставляет rpId и userId. Аутентификатор ищет все локальные
учетные данные, соответствующие rpId и userId. Результат сравнивается с
allAcceptedCredentialIds. Если есть локальные учетные данные, которых нет в
allAcceptedCredentialIds, то они удаляются локально (или скрываются, в зависимости от
аутентификатора).allAcceptedCredentialIds,
то они снова появятся в будущих церемониях аутентификации.signalAllAcceptedCredentials(options) важно учитывать, что
аутентификаторы могут не всегда быть подключены в момент выполнения этого метода. В
результате Relying Parties могут рассмотреть возможность периодического запуска
signalAllAcceptedCredentials(options), например, при каждом входе в систему, чтобы
гарантировать актуальность всех учетных данных.allAcceptedCredentialIds). Учетные данные, не включенные в этот список, могут
быть скрыты или удалены аутентификатором, возможно, необратимо. Чтобы предотвратить
ошибочное исключение валидных учетных данных, крайне важно убедиться в полноте
списка. Если валидный Credential ID был случайно пропущен, его следует как можно
скорее добавить обратно в signalAllAcceptedCredentials(options), чтобы сделать
видимым снова (при условии, что аутентификатор это поддерживает).На скриншоте выше видно, как Google Chrome сигнализирует об удалении. WebAuthn Signal API можно протестировать с помощью Google Password Manager на десктопе.
Чтобы эффективно внедрить WebAuthn Signal API и обеспечить бесшовную синхронизацию метаданных Passkey между клиентскими аутентификаторами, рассмотрите следующие рекомендации:
signalAllAcceptedCredentials(options) после каждого успешного
входа: Этот подход гарантирует, что все метаданные и Credential ID обновляются одним
методом, упрощая процесс и поддерживая согласованность на всех устройствах и платформах,
и в то же время деактивирует удаленные или устаревшие учетные данные.signalUnknownCredential(options) для
масштабных развертываний: Рассмотрите возможность использования обмена сообщениями в
реальном времени с методом signalUnknownCredential(options) в
масштабных развертываниях или когда
требуется немедленное обновление. Этот метод может повысить эффективность и точность
управления учетными данными, гарантируя, что недействительные или устаревшие данные
будут оперативно удалены из интерфейса выбора.Следуя этим рекомендациям, вы сможете эффективно внедрить WebAuthn Signal API, как только он станет поддерживаться, обеспечивая актуальность и согласованность метаданных Passkey на всех клиентских аутентификаторах, тем самым предоставляя плавный и безопасный пользовательский опыт.
Стандарт WebAuthn постоянно развивается, ежемесячно обрастая новыми функциями. Введение WebAuthn Signal API — это значительный шаг вперед в управлении метаданными и удалением Passkeys на клиентских аутентификаторах. Этот API решает важные задачи синхронизации информации между Relying Parties (RP) и аутентификаторами, а также гарантирует удаление недействительных или устаревших Passkeys, тем самым улучшая пользовательский опыт.
user.name и user.displayName, которая может вызвать путаницу при
отображении учетных данных в интерфейсе выбора. Кроме того, он помогает поддерживать
чистоту и безопасность интерфейса выбора, удаляя отозванные или удаленные Passkeys.По мере развития стандарта WebAuthn, он выигрывает от разнообразных интересов участников, которые продвигают различные части стандарта вперед. Наблюдение за этими разработками имеет решающее значение для того, чтобы оставаться в курсе последних улучшений и гарантировать, что реализации соответствуют новейшим лучшим практикам и стандартам. Сообщество WebAuthn продолжает внедрять инновации, делая аутентификацию более безопасной и удобной для пользователей.
Related Articles
Table of Contents