Publicado em: 3 de outubro de 2025
Temos o prazer de anunciar que a API Digital Credentials agora está ativada por padrão no Chrome 141. Além disso, o iOS 26 adiciona suporte à API Digital Credentials no Chrome e em outros navegadores. Essa API traz um novo nível de segurança e privacidade para a verificação de identidade na Web, permitindo que os sites solicitem e recebam informações verificáveis dos usuários de maneira padronizada.
Após um teste de origem bem-sucedido, a API Digital Credentials agora oferece suporte à apresentação de credenciais no mesmo dispositivo no Android e à apresentação entre dispositivos no Chrome para computador.
Contexto
Até agora, a verificação de identidade on-line era um processo complexo, que muitas vezes exigia que os usuários enviassem digitalizações dos documentos de identificação. Essa prática geralmente significa compartilhar mais dados do que o necessário, o que gera preocupações significativas de privacidade para os usuários. Para os desenvolvedores, isso também cria um risco, já que eles precisam garantir que a solução seja capaz de processar e armazenar dados sensíveis, muitas vezes não uniformes, de maneira segura e preservando a privacidade.
Ao mesmo tempo, regulamentações como a eIDAS 2.0 (link em inglês) exigem que os governos ofereçam meios de identificação digital ao público. Essas carteiras de identidade digital precisam ser capazes de armazenar várias credenciais, incluindo comprovantes de identidade e idade. Os provedores de serviços on-line podem solicitar essas credenciais para verificar a identidade do usuário.
Reconhecendo o potencial das credenciais digitais para atender às demandas dos usuários por privacidade e às necessidades dos desenvolvedores de verificar os dados dos usuários, a comunidade de padrões da Web no W3C desenvolveu uma solução: a API Digital Credentials. A API Digital Credentials visa resolver o problema ao introduzir uma interface integrada para verificar as informações do usuário, o que melhora a segurança, a privacidade e a experiência do usuário em comparação com as alternativas. Com essa API, os usuários não precisam mais fazer upload de documentos sensíveis, como digitalizações de documentos de identificação, em vários sites. Em vez disso, os sites podem criar confiança com os usuários solicitando apenas os dados específicos e assinados criptograficamente de que precisam de emissores confiáveis.
Recursos principais
A API Digital Credentials foi criada com base em três princípios fundamentais: privacidade, suporte multiplataforma e padronização.
Privacidade
A API Digital Credentials melhora a privacidade e a segurança on-line. Ele permite que os usuários apresentem um documento de identificação digital das carteiras digitais para sites e verifiquem fatos específicos sem divulgar os dados sensíveis subjacentes. Por exemplo, a API pode verificar se um usuário tem mais de 18 anos sem revelar a data de nascimento completa. Esse princípio de "divulgação seletiva" garante que os sites recebam apenas as informações mínimas necessárias.
A API Digital Credentials também é compatível com protocolos de provas de conhecimento zero (ZKPs, na sigla em inglês), como o Longfellow ZK do Google, que garante a privacidade do usuário retornando uma prova criptográfica de que uma determinada declaração de identidade é verdadeira sem revelar outras informações.
Suporte multiplataformas
A API Digital Credentials foi criada para oferecer suporte a diferentes plataformas, para que os usuários possam apresentar informações verificadas em vários dispositivos.
No Android:oferece uma interface do usuário integrada, permitindo que os usuários selecionem credenciais no app de carteira instalado.
Em computadores:os usuários podem apresentar credenciais da carteira digital para um site no navegador do computador. Ao ler um QR code, o sistema estabelece uma conexão segura, criptografada de ponta a ponta e resistente a phishing entre o computador e o dispositivo móvel. Essa conexão usa o protocolo CTAP para verificar a proximidade do usuário por BLE, garantindo que ele esteja presente fisicamente e no controle dos dois dispositivos.
Padronização
A interoperabilidade é fundamental. No Chrome, a API Digital Credentials é independente da plataforma de protocolo e compatível com vários protocolos de apresentação, por exemplo, OpenID4VP e Anexo C da ISO 18013-7. A Apple também lançou o suporte para a API Digital Credentials no Safari 26.0.
Além disso, a API Digital Credentials se baseia no suporte integrado ao gerenciamento de credenciais no Android e em um ecossistema crescente de carteiras compatíveis. A Carteira do Google é uma das primeiras a adotar essa tecnologia, com suporte da Carteira da Samsung e do 1Password a caminho.
O que há de novo desde o teste de origem?
Para quem participou do nosso teste de origem anterior, a API Digital Credentials foi movida de navigator.identity.get()
para navigator.credentials.get()
, alinhando-a ao esforço mais amplo de unificação de identidade com a API Credential Management.
Além disso, o parâmetro providers
foi renomeado como requests
, e request
foi renomeado como data
.
Implementação
A integração da API Digital Credentials envolve duas etapas principais: detecção de recursos e solicitação da credencial. Os desenvolvedores também precisam implementar uma lógica personalizada para determinar se o aplicativo pode usar as credenciais.
Detecção de recursos
Antes de mostrar um botão "Verificar com credencial digital", confira se a API Digital Credentials está disponível no navegador do usuário.
if (typeof DigitalCredential !== "undefined") {
// Digital Credentials API is supported
} else {
// Digital Credentials API is not supported
}
Solicitar uma credencial
Para solicitar uma credencial, é necessário fazer uma chamada para navigator.credentials.get()
com um parâmetro digital
. No tipo de credencial digital, adicione uma matriz requests
que contenha
DigitalCredentialGetRequest
com os seguintes parâmetros básicos:
protocol
: especifique um protocolo de troca com uma string. Por exemplo,"openid4vp"
ou"org-iso-mdoc"
. Detecte se o protocolo é compatível com o navegador da seguinte maneira:if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) { // Create a request with this protocol } else { // Protocol is not supported }
data
: um objeto com os parâmetros aceitos pelos apps de carteira digital para o protocolo especificado. Para"openid4vp"
, os parâmetros são definidos no OpenID para apresentação verificável (OID4VP) para a especificação da API de credenciais digitais do W3C.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); }
Por exemplo, para solicitar o sobrenome, o nome próprio e um valor booleano que indica se o usuário tem mais de 21 anos, especifique a seguinte carga útil:
{
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"
]
}
]
}
]
}
}
}
Neste exemplo, client_metadata
precisa especificar uma lista de formatos compatíveis. Consulte a
especificação
para saber quais valores podem ser usados. O valor jwks
opcional definido em client_metadata
precisa conter chaves públicas usadas para criptografia da resposta. Você também pode
conferir o código de demonstração para mais exemplos.
Confira um exemplo de um payload de resposta criptografada do objeto 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]"
}
}
Neste exemplo, o sistema solicita a credencial com o protocolo openid4vp-v1-unsigned
, e a resposta contém response
na propriedade data
.
A maneira exata de analisar a resposta depende do protocolo. Normalmente, você precisa:
- Descriptografe o payload da resposta. O método de descriptografia depende do protocolo usado. Saiba como descriptografar o payload para
openid4vp
(usando JWE) eorg-iso-mdoc
(usando criptografia de chave pública híbrida). - Verificar assinaturas e emissor. Para mais detalhes, consulte a documentação sobre Aceitação on-line de credenciais digitais.
Para ver exemplos de código de diferentes protocolos, confira o código da demonstração ou a versão hospedada ativa.
Verificar a confiança no emissor
A assinatura criptográfica das credenciais digitais prova que elas são autênticas. No entanto, os desenvolvedores precisam verificar se o emissor é adequado e confiável para o caso de uso específico. Por exemplo, para conceder um desconto para estudantes universitários, um site de e-commerce exigiria uma credencial emitida por uma universidade credenciada e rejeitaria uma credencial assinada por qualquer outra entidade. Uma maneira comum de verificar a confiança no emissor é manter uma lista de emissores aprovados e rejeitar qualquer emissor que não corresponda.
Primeiros passos
Tudo pronto para começar? Confira o que você precisa fazer.
- Disponibilidade:o Chrome 141 ou mais recente ativa a API Digital Credentials por padrão em diferentes plataformas.
- Pré-requisitos:os usuários precisam de um dispositivo compatível, por exemplo, um Android com o Google Play Services versão 24.0 ou mais recente ou um dispositivo iOS com a versão 26 ou mais recente. O dispositivo precisa ter um aplicativo de carteira digital instalado que seja compatível com a API Digital Credentials, como a Carteira do Google ou uma carteira de demonstração.
- Teste a demonstração:a melhor maneira de entender a experiência do usuário e testar sua implementação é acessar a demonstração ao vivo em https://verifier.multipaz.org com o Chrome 141 ou mais recente.
Recursos
Para mais informações, consulte os seguintes recursos:
- Guia para desenvolvedores:API Digital Credentials
- Especificação:Credenciais digitais do W3C
- Suporte do Android:Suporte do Android para credenciais digitais
Envie feedback
Agora que a API Digital Credentials foi lançada, queremos saber como foi sua experiência de desenvolvimento com ela. Registre um problema para compartilhar seu feedback ou informar bugs.