Publicado em 4 de setembro de 2024 e atualizado pela última vez em 16 de outubro de 2024
Um teste de origem para a API Digital Credentials está sendo iniciado no Chrome 128. A API Digital Credentials é uma nova API da plataforma da Web que permite que os sites solicitem seletivamente informações verificáveis sobre o usuário por meio de credenciais digitais, como carteira de habilitação ou documento de identificação nacional armazenado em uma carteira digital.
Contexto
A identidade digital do mundo real está se tornando uma realidade, com muitas entidades públicas e privadas começando a emitir credenciais digitais vinculadas a dispositivos. Por exemplo, agora é possível provisionar carteiras de habilitação e documentos de identificação em alguns estados dos EUA (como Arizona, Califórnia, Colorado, Geórgia e Maryland) em apps de carteira digital, como a Carteira do Google em dispositivos móveis. Regulamentações sobre a aceitação de credenciais digitais para determinadas verificações on-line também estão surgindo, e a eIDAS 2.0 é um exemplo.
Os recursos de uma credencial digital dependem do formato, mas geralmente incluem:
- Segurança e privacidade aprimoradas: o uso de criptografia avançada e métodos de autenticação fortes ajuda a proteger dados sensíveis e garante o acesso seguro. Por exemplo, a apresentação de uma credencial geralmente é protegida por uma autenticação do usuário pelo app de carteira.
- Divulgação seletiva: as partes confiáveis (RP) podem solicitar informações selecionadas da credencial, permitindo que os usuários limitem os dados compartilhados ao necessário para o caso de uso. Por exemplo, é possível compartilhar se um usuário tem mais de 18 anos sem revelar a data de nascimento dele.
- Interoperabilidade: a credencial precisa obedecer a padrões internacionais, permitindo a compatibilidade entre diferentes sistemas e países, facilitando a aceitação transfronteiriça.
- Verificabilidade: os dados de credenciais compartilhados são assinados digitalmente pelo emissor. O RP pode verificar essa assinatura para verificar a autenticidade dos dados.
Devido à natureza verificável das credenciais digitais, elas podem permitir casos de uso como:
- Verificação de idade:solicite a idade de uma pessoa antes de exibir conteúdo ou comprar itens com restrição de idade.
- Verificação de identidade:solicite nome e endereço para verificar a identidade de uma pessoa para compliance legal ou prevenção de fraudes.
- Verificação de carteira de habilitação:verifique se uma pessoa tem permissão para dirigir (por exemplo, ao alugar um carro).
Como os sites começaram a se comunicar diretamente com aplicativos de carteiras para dispositivos móveis (por exemplo, usando esquemas de URL personalizados) para solicitar credenciais digitais para vários casos de uso, os navegadores veem uma oportunidade de tornar essa interação mais segura, resistente a abusos e mais fácil de usar com uma API específica.
Apresentação da API Digital Credentials
A API Digital Credentials é uma nova API da plataforma da Web que permite que os sites de RP solicitem a apresentação de credenciais digitais de apps de carteira. A API está disponível no Chrome como um teste de origem a partir do Chrome 128.
A API não depende de protocolo, permitindo que o RP especifique um protocolo com base nos requisitos. Quando um RP faz uma solicitação, o navegador a envia ao sistema operacional móvel, que procura uma credencial correspondente nos apps de carteira instalados. Se algum deles for encontrado, o sistema operacional móvel vai solicitar que o usuário selecione um e enviar a solicitação para a carteira selecionada. Após uma autenticação local, a carteira retorna uma resposta com os dados de credencial solicitados.
O Chrome vai oferecer suporte à API no Chrome para Android para solicitar credenciais de apps de carteira no mesmo dispositivo. No futuro, planejamos oferecer suporte ao Chrome para computador para solicitar credenciais em vários dispositivos de outro dispositivo móvel.
Na versão de lançamento, a Carteira do Google vai ser integrada à API Digital Credentials, permitindo que algumas empresas e organizações iniciem uma solicitação para que os usuários apresentem um documento de identificação on-line pelo Chrome no Android e verifiquem a autenticidade dos dados transmitidos examinando a assinatura criptográfica. Para participar, preencha este formulário e expresse seu interesse em aceitar documentos de identificação digital da Carteira do Google.
Em breve, a API também será usada pelas Contas do Google para verificar a data de nascimento de alguns usuários. Os usuários que moram em um estado dos EUA com suporte poderão usar o documento de identificação estadual ou a carteira de habilitação provisionado nos apps de carteira disponíveis (incluindo a Carteira do Google) para compartilhar apenas a data de nascimento com o Google sem compartilhar outros detalhes da identidade. Isso permite que os usuários demonstrem ao Google, de forma a preservar a privacidade, que atendem aos requisitos de idade relacionados à conta.
Faça um teste
Requisitos:
- Google Play Services 23.40 ou mais recente
- Chrome 128 ou mais recente
- Ative a flag em
chrome://flags#web-identity-digital-credentials
Para testar a API Digital Credentials, siga as instruções:
- Instale o aplicativo de carteira de demonstração seguindo as instruções.
- Faça o download de um aplicativo de carteira de demonstração no seu dispositivo Android. O código-fonte pode ser encontrado no repositório de credenciais de identidade da OpenWallet Foundation.
- Execute um comando
adb install -t <path-to-apk>
para instalar o app.
- Inicie o app IC Wallet e provisione uma carteira de habilitação para dispositivos móveis (mDL) de demonstração.
- Toque no botão de menu e selecione Adicionar documento autoassinado.
- Acesse https://digital-credentials.dev com o Chrome 128 ou mais recente.
- Pressione Solicitar credenciais (OpenID4VP).
Confira a demonstração que usa https://digital-credentials.dev, um site de teste para desenvolvedores gerar solicitações de credenciais para diferentes atributos:
Confira como a demonstração funciona:
Como a API funciona
A API Digital Credentials é baseada na API Credential Management, mas em uma plataforma de API independente: navigator.identity
. Ao chamar navigator.identity.get()
, o site pode solicitar uma credencial digital armazenada em um app de carteira para dispositivos móveis.
// Gets a CBOR with specific fields out of mobile driver's license as an mdoc
const controller = new AbortController();
const {protocol, data} = await navigator.identity.get({
signal: controller.signal,
digital: {
providers: [{
protocol: "openid4vp",
request: {
response_type: "vp_token",
nonce: "n-0S6_WzA2Mj",
client_metadata: {...},
presentation_definition: {...}
}
}],
}
});
A plataforma básica da API é semelhante à navigator.credentials.get()
, mas só aceita o tipo de credencial "digital"
. No tipo de credencial digital, adicione uma matriz providers
que contenha IdentityRequestProvider
com os seguintes parâmetros básicos:
protocol
: especifica um protocolo de troca com uma string. No momento do teste de origem, o protocolo principal em desenvolvimento é"openid4vp"
.request
: preencha os parâmetros que os apps de carteira digital aceitam para o protocolo especificado. Para"openid4vp"
, os parâmetros são definidos na especificação OpenID para apresentação verificável (OID4VP) para a API W3C Digital Credentials.
Exemplo de payload para o tipo de credencial digital usando OID4VP:
{
protocol: 'openid4vp',
request: {
response_type: 'vp_token',
nonce: 'gf69kepV+m5tGxUIsFtLi6pwg=',
client_metadata: {},
presentation_definition: {
id: 'mDL-request-demo',
input_descriptors: [{
id: "org.iso.18013.5.1.mDL",
format: {
mso_mdoc: {
alg: ["ES256"]
}
},
constraints: {
limit_disclosure: "required",
fields: [
{
path: ["$['org.iso.18013.5.1']['family_name']"],
intent_to_retain: false
}, {
path: ["$['org.iso.18013.5.1']['given_name']"],
intent_to_retain: false
}, {
path: ["$['org.iso.18013.5.1']['age_over_21']"],
intent_to_retain: false
}
]
}
}],
}
}
}
Com essa solicitação, as carteiras que têm mDLs no dispositivo vão fornecer um conjunto verificável de credenciais que contém:
- Sobrenome do usuário.
- Nome do usuário.
- Um valor booleano que indica se o usuário tem mais de 21 anos ou não.
Confira um exemplo de payload de resposta:
{
data: '{\n "vp_token": "o2d2ZXJzaW9uYz..."\n}'
id: '',
protocol: 'openid4vp',
type: 'digital'
}
Neste exemplo, a credencial foi solicitada com o protocolo "openid4vp"
, e a resposta contém "vp_token"
na propriedade data
. Consulte a especificação OpenID para apresentação verificável (OID4VP) da API de credenciais digitais do W3C para saber como analisar a resposta e verificar a credencial.
A API Digital Credentials tem suporte no Chrome no Android como um teste de origem. No momento, o Chrome para computador e iOS não oferece suporte a esse recurso. Para outros mecanismos de navegador, as conversas ativas estão sendo facilitadas pelo Grupo da comunidade do Incubator da Web do W3C.
Participar do teste de origem
Para desenvolvimento, é possível ativar a API Digital Credentials localmente ativando a flag chrome://flags#web-identity-digital-credentials
do Chrome 128 ou mais recente.
Esse recurso também está disponível como um teste de origem. Com eles, você pode testar novos recursos e fornecer feedback sobre usabilidade, praticidade e eficácia aos padrões da comunidade da Web. Para mais informações, consulte Começar a usar os testes de origem. Para se inscrever neste ou em outro teste de origem, acesse a página de registro.
- Solicite um token para sua origem.
- Adicione o token às suas páginas. Há duas maneiras de fazer isso:
- Adicione uma tag
<meta>
origin-trial
ao cabeçalho de cada página. Por exemplo, pode ser algo como:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">.
- Se for possível configurar seu servidor, também é possível adicionar o token usando um cabeçalho HTTP
Origin-Trial
. O cabeçalho de resposta resultante vai ser parecido com este:Origin-Trial: TOKEN_GOES_HERE.
- Adicione uma tag
Compartilhar feedback
Se você tiver algum feedback sobre a API Digital Credentials, envie para o Issue Tracker do Chromium (em inglês).