Опубликовано: 3 октября 2025 г.
Мы рады сообщить, что API цифровых учетных данных теперь включен по умолчанию в Chrome 141. Кроме того, iOS 26 добавляет поддержку API цифровых учетных данных в Chrome и другие браузеры. Этот API обеспечивает новый уровень безопасности и конфиденциальности при проверке личности в интернете, предоставляя стандартизированный способ для веб-сайтов запрашивать и получать проверяемую информацию от пользователей.
После успешного тестирования в Origin API цифровых учетных данных теперь поддерживает как отображение учетных данных на одном устройстве в Android, так и отображение на разных устройствах в настольной версии Chrome.
Фон
Онлайн-проверка личности до сих пор оставалась сложным процессом, часто требующим от пользователей загрузки сканов своих удостоверений личности. Эта практика часто означает передачу большего объема данных, чем необходимо, что создает серьезные проблемы с конфиденциальностью для пользователей. Для разработчиков это также создает риски, поскольку они должны обеспечить, чтобы их решение могло обрабатывать и хранить зачастую неоднородные конфиденциальные данные безопасным и надежным способом.
В то же время, такие правила, как eIDAS 2.0, обязывают правительства предоставлять населению средства цифровой идентификации. Эти цифровые кошельки для идентификации должны иметь возможность хранить различные учетные данные, включая подтверждение личности и возраста. Онлайн-провайдеры могут запрашивать эти данные для проверки личности пользователя.
Признавая потенциал цифровых учетных данных для удовлетворения как требований пользователей к конфиденциальности, так и потребностей разработчиков в проверке пользовательских данных, сообщество веб-стандартов W3C разработало решение: API цифровых учетных данных . API цифровых учетных данных призван решить эту проблему, представляя встроенный интерфейс для проверки информации о пользователе, что повышает безопасность, конфиденциальность и удобство использования по сравнению с альтернативными решениями. Благодаря этому API пользователям больше не нужно загружать конфиденциальные документы, такие как сканы удостоверений личности, на множество веб-сайтов. Вместо этого веб-сайты могут укреплять доверие своих пользователей, запрашивая у доверенных эмитентов только необходимые им данные, зашифрованные криптографическим способом.
Основные функции
API цифровых учетных данных основан на трех основных принципах: конфиденциальность, кроссплатформенная поддержка и стандартизация.
Конфиденциальность
API цифровых учетных данных повышает конфиденциальность и безопасность в интернете. Он позволяет пользователям предъявлять веб-сайтам цифровые удостоверения личности из своих мобильных кошельков для проверки определенных фактов без раскрытия лежащих в их основе конфиденциальных данных. Например, API может проверить, что пользователю больше 18 лет, не раскрывая его полную дату рождения. Этот принцип «избирательного раскрытия» гарантирует, что веб-сайты получают только минимально необходимую информацию.
API цифровых учетных данных также совместим с протоколами доказательств с нулевым разглашением (ZKP) , такими как Longfellow ZK от Google, который обеспечивает конфиденциальность пользователя, возвращая криптографическое доказательство истинности определенного утверждения о личности без раскрытия какой-либо другой информации.
Кроссплатформенная поддержка
API цифровых учетных данных призван поддерживать различные платформы, чтобы пользователи могли удобно предоставлять проверенную информацию на разных устройствах.
На Android: Предоставляет встроенный пользовательский интерфейс, позволяющий пользователям выбирать учетные данные из установленного приложения кошелька.
На настольном компьютере: Пользователи могут ввести учетные данные из своего мобильного кошелька на веб-сайт в браузере настольного компьютера. Сканируя QR-код, система устанавливает защищенное, сквозное зашифрованное и устойчивое к фишингу соединение между настольным компьютером и мобильным устройством. Это соединение использует протокол CTAP для проверки близости пользователя через BLE, гарантируя его физическое присутствие и контроль над обоими устройствами.
Стандартизация
Взаимодействие имеет ключевое значение. В Chrome API цифровых учетных данных является протокольно-платформенно-независимым и совместим с различными протоколами представления, например, OpenID4VP и приложением C стандарта ISO 18013-7 . Apple также добавила поддержку API цифровых учетных данных начиная с Safari 26.0.
Кроме того, API цифровых учетных данных основан на встроенной поддержке управления учетными данными в Android и растущей экосистеме совместимых кошельков. Google Wallet является одним из первых, кто внедрил эту функцию, а поддержка со стороны Samsung Wallet и 1Password ожидается в будущем.
Что нового произошло после судебного разбирательства по делу Origin?
Для тех, кто участвовал в нашем предыдущем пробном запуске , вы заметите, что API цифровых учетных данных переместился с navigator.identity.get() на navigator.credentials.get() , что соответствует более широкой инициативе по унификации идентификации с API управления учетными данными . Кроме того, параметр providers был переименован в requests , а request — в data .
Выполнение
Интеграция API цифровых учетных данных включает два основных этапа: определение функциональности и запрос учетных данных. Разработчикам также следует реализовать собственную логику для определения того, может ли их приложение использовать эти учетные данные.
Обнаружение признаков
Прежде чем отображать кнопку «Подтвердить с помощью цифровых учетных данных», убедитесь, что API цифровых учетных данных доступен в браузере пользователя.
if (typeof DigitalCredential !== "undefined") {
// Digital Credentials API is supported
} else {
// Digital Credentials API is not supported
}
Запросить учетные данные
Запрос учетных данных включает вызов метода navigator.credentials.get() с digital параметром. Внутри типа цифровых учетных данных добавьте массив requests , содержащий метод DigitalCredentialGetRequest со следующими основными параметрами:
protocol: Укажите протокол обмена данными в виде строки. Например,"openid4vp"или"org-iso-mdoc". Определите, поддерживается ли протокол браузером, следующим образом:if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) { // Create a request with this protocol } else { // Protocol is not supported }data: Объект с параметрами, которые принимают приложения цифровых кошельков для указанного протокола. Для"openid4vp"параметры определены в OpenID for Verifiable Presentation (OID4VP) для спецификации W3C Digital Credentials API.try { const digitalCredential = await navigator.credentials.get({ digital: { requests: [{ protocol: "openid4vp-v1-unsigned", data: { response_type: "vp_token", nonce: "[some-nonce]", client_metadata: {...}, dcql_query: {...} } }] } }); // Decrypt payload respons and verify credentials on the backend const response = await fetch("/verify", { method: "POST", body: JSON.stringify(digitalCredential.data), headers: { 'Content-Type': 'application/json' } }); } catch (e) { // Handle errors, such as the user canceling the request console.error(e); }
Например, чтобы запросить фамилию пользователя, имя и логическое значение, указывающее, старше ли пользователь 21 года, можно указать следующую полезную нагрузку:
{
protocol: 'openid4vp-v1-unsigned',
data: {
response_type: 'vp_token',
nonce: '[some-nonce]',
// Contains the Verifier metadata values, including supported credential formats and response encryption public key
client_metadata: {
// Supported credential formats. Refer to the documentation for specific values
vp_formats_supported: {...},
// Public key(s). Refer to the documentation for more detail.
jwks: {...}
},
dcql_query: {
// A wallet will try to find credentials it holds that match these definitions.
credentials: [
{
// A locally unique identifier for this credential definition within the query.
id: "cred_vc",
format: "dc+sd-jwt",
meta: {
// 'vct_values' specifies the Verifiable Credential allowed type.
// In this case, it's a European Digital Identity (EUDI) Personal Identification Data (PID) credential.
vct_values: [
"urn:eudi:pid:1"
]
},
// 'claims' is an array of specific data that's being requested.
claims: [
{
// The path ["age_equal_or_over", "18"] corresponds to accessing `credential.age_equal_or_over['18']`.
path: [
"age_equal_or_over",
"18"
]
}
]
}
]
}
}
}
В этом примере параметр client_metadata должен указывать список поддерживаемых форматов. Обратитесь к спецификации , чтобы узнать, какие значения можно использовать. Необязательное значение jwks заданное в client_metadata должно содержать открытые ключи, используемые для шифрования ответа. Вы также можете посмотреть демонстрационный код для получения дополнительных примеров.
Вот пример зашифрованного ответа объекта DigitalCredential :
{
// This is an example for a response using an OpenID4VP protocol.
// The format of the 'data' object will differ for other protocols.
"protocol": "openid4vp-v1-unsigned",
"data": {
// To decrypt this JWE payload, use the private key.
// The decrypted payload will be a JSON object containing the
// Verifiable Presentation in the 'vp_token' claim.
"response": "[jwe-token]"
}
}
В этом примере система запрашивает учетные данные по протоколу openid4vp-v1-unsigned , а ответ содержит response в свойстве data .
Точный способ обработки ответа зависит от протокола. Обычно необходимо:
- Расшифруйте полезную нагрузку ответа . Метод расшифровки зависит от используемого протокола. См. инструкции по расшифровке полезной нагрузки для
openid4vp(с использованием JWE) иorg-iso-mdoc(с использованием гибридного шифрования с открытым ключом). - Проверьте подписи и эмитента . Для получения более подробной информации см. документацию по онлайн-принятию цифровых учетных данных .
Чтобы посмотреть примеры кода для различных протоколов, ознакомьтесь с кодом демонстрационной версии или работающей версии .
Проверьте уровень доверия к эмитенту.
Криптографическая подпись цифровых учетных данных доказывает их подлинность. Однако разработчики должны убедиться, что эмитент подходит и заслуживает доверия для их конкретного случая использования. Например, для предоставления скидки студентам университета сайт электронной коммерции потребует учетные данные, выданные аккредитованным университетом, и отклонит учетные данные, подписанные любыми другими организациями. Распространенный способ проверки доверия к эмитенту — это ведение списка утвержденных эмитентов и отклонение любых эмитентов, которые не соответствуют требованиям.
Начать
Готовы начать строительство? Вот что вам нужно знать.
- Доступность: В Chrome версии 141 и новее API цифровых учетных данных включен по умолчанию на разных платформах.
- Предварительные условия: Пользователям необходимо совместимое устройство, например, Android с установленными сервисами Google Play версии 24.0 или выше, или устройство iOS с версией 26 или выше. На устройстве должно быть установлено приложение цифрового кошелька, поддерживающее API цифровых учетных данных, например, Google Wallet или демонстрационный кошелек .
- Попробуйте демоверсию: Лучший способ понять пользовательский опыт и протестировать свою реализацию — это попробовать работающую демоверсию по адресу https://verifier.multipaz.org в Chrome версии 141 или новее.
Ресурсы
Для получения более подробной информации ознакомьтесь со следующими ресурсами:
- Руководство для разработчиков: API цифровых учетных данных
- Спецификация: Цифровые учетные данные W3C
- Поддержка Android: поддержка цифровых учетных данных в Android.
Поделитесь своим мнением.
Теперь, когда API цифровых учетных данных запущен, мы хотели бы узнать о вашем опыте работы с ним. Создайте заявку , чтобы поделиться своим мнением или сообщить о любых ошибках.