Publicado em: 8 de julho de 2026. Última atualização: 5 de outubro de 2026
Ao coletar um endereço de e-mail como parte de um processo de inscrição, login, assinatura, finalização de compra, recuperação de conta ou outro, é prática comum confirmar se o endereço de e-mail pertence à pessoa que o inseriu. Os métodos de verificação atuais, como senhas únicas (OTPs) ou links de verificação de e-mail (links mágicos), exigem que o usuário saia do seu site. Esse processo disruptivo pode aumentar o risco de o usuário, seja humano ou um agente, abandonar a sessão completamente e nunca concluir o processo de autenticação.
A API Email Verification é uma proposta que permite que o navegador se comunique diretamente com o provedor de e-mail para verificar se o usuário é o proprietário do endereço de e-mail. Os usuários selecionam um e-mail no preenchimento automático ou na sugestão de preenchimento automático do navegador, enviam o formulário, e o site verifica o endereço de e-mail com o provedor sem enviar um e-mail ou interromper o fluxo do usuário.
A coleta de e-mails é um ponto de conversão essencial na jornada de um usuário, e o Chrome gostaria de receber feedback sobre a proposta de sites que querem verificar e-mails, provedores de e-mail que podem realizar a verificação e usuários que estão passando pelo processo. Você pode se inscrever no teste de origem hoje mesmo e seguir as instruções de implementação aqui. Para uma configuração geral do teste de origem, consulte Como começar a usar os testes de origem.
Você pode testar o fluxo com uma conta de demonstração:
- A demonstração do emissor oferece uma conta e uma sessão de e-mail simuladas.
- A demonstração do verificador vai verificar qualquer provedor participante
Fluxo de verificação de e-mail
As seções a seguir explicam o que você e seus usuários precisam para iniciar o fluxo de verificação de e-mail e todo o fluxo de trabalho ao usar o protocolo de verificação de e-mail.
Termos-chave
Os principais termos da API Email Verification são:
- Verificador: o site que coleta o endereço de e-mail e quer verificá-lo. O verificador também é chamado de parte confiável.
- Provedor de e-mail: o serviço que fornece o endereço de e-mail do usuário, por exemplo,
gmail.com. - Emissor: o serviço que gerencia a conta do e-mail do usuário, por exemplo,
accounts.google.com. O emissor também é chamado de provedor de identidade.
Em alguns casos, o provedor de e-mail e o emissor podem operar no mesmo domínio. No entanto, é importante distinguir entre ter um endereço de e-mail e ter uma sessão ativa para a conta associada.
Pré-requisitos
- O usuário precisa fazer login no provedor ou emissor de e-mail no mesmo perfil do navegador. Por exemplo, se eles usam o Gmail, precisam fazer login na Conta do Google.
- Como um site verificador participante, você precisa se inscrever no teste de origem e fornecer o token na mesma página do formulário de e-mail.
O usuário precisa selecionar o endereço de e-mail no menu suspenso de preenchimento automático.
- Se o usuário já tiver inserido um endereço de e-mail no campo, ele será oferecido usando o preenchimento automático.
Se o usuário tiver adicionado o endereço de e-mail usando as configurações do Chrome "Preenchimento automático e senha" (
chrome://settings/autofill), ele será oferecido usando o preenchimento automático.
Na primeira vez que um usuário fornecer um endereço de e-mail para verificação, uma solicitação de permissão vai aparecer. Isso só acontece uma vez por endereço de e-mail.
Depois que o usuário tiver essa sessão ativa no navegador, ele poderá iniciar o processo:
- Em um formulário com um campo de e-mail, o usuário seleciona o endereço de e-mail no menu suspenso de preenchimento automático. O site de verificação fornece um campo oculto no formulário com um nonce por instância para validar essa solicitação.
Em seguida, o navegador vai recuperar o registro DNS de verificação de e-mail do domínio de e-mail. Isso aponta o navegador para o emissor. Em seguida, o emissor vai confirmar que tem uma sessão ativa para esse endereço de e-mail.
Em seguida, o emissor vai fornecer o token de verificação de e-mail (EVT, na sigla em inglês) para o endereço. O navegador combina isso em um JWT vinculado à chave com o EVT, a origem do site e o valor de uso único do formulário de entrada.
Quando o formulário é enviado, o pacote EVT é adicionado ao campo oculto e enviado ao site.
Em seguida, o site de verificação verifica cada um desses detalhes: o endereço de e-mail esperado, o nonce e as assinaturas do navegador e do emissor.
O usuário recebe uma pequena notificação informando que o provedor de e-mail verificou o endereço.
Esse processo confirma ao site verificador que o endereço de e-mail é válido e pertence ao usuário atual. Assim, o site pode pular o envio de um e-mail de verificação.
Os usuários podem gerenciar os e-mails verificados em Configurações > Preenchimento automático e
senhas > Dados de contato > E-mail verificado (ou abra
chrome://settings/contactInfo).
Considerações sobre casos de uso
A verificação de e-mail é um aprimoramento progressivo no seu fluxo atual que remove a necessidade de um usuário sair do seu site para recuperar uma OTP ou clicar em um link. Os sites podem adicionar os campos de verificação de e-mail a todos os formulários relevantes, como logins, inscrições em newsletters, criação de contas e recuperação de senhas. O EVP só é acionado se o navegador for compatível com ele. Se nenhum código for recebido no envio ou se alguma das etapas de validação falhar, você poderá voltar ao fluxo padrão de confirmação por e-mail. Isso também significa que não há detecção de recursos para a API. O site do verificador trata o EVT como opcional, processando-o se ele estiver presente na solicitação.
A verificação de e-mail confirma que o usuário tem uma sessão ativa com o provedor do endereço de e-mail. Ele não verifica se o e-mail chegou ao usuário. Talvez você ainda queira enviar e-mails de boas-vindas ou de integração e precisar pedir ao usuário para verificar as configurações de spam.
Implementar o site do verificador
Para mais detalhes, confira o código da demonstração de ponta a ponta e consulte as etapas de validação nas propostas da API Email Verification e do protocolo Email Verification.
Configurar campos de formulário
Verifique se os campos do formulário têm os atributos corretos:
<input
name="email-address"
type="email"
autocomplete="email">
<input
type="hidden"
name="token"
nonce="rAnD0m-VaLuE"
autocomplete="email-verification-token">
Defina os atributos type e autocomplete da entrada email como email para
permitir que o navegador ofereça preenchimento automático para o endereço de e-mail.
O novo campo hidden será preenchido com o token de verificação de e-mail no envio do formulário. Os atributos necessários são:
- Defina
type="hidden"porque esse campo não exige entrada do usuário. - Defina
nonce="rAnD0m-VaLuE". O site precisa fornecer um nonce exclusivo vinculado à sessão para verificar o envio do formulário. - Defina
autocomplete="email-verification-token". O navegador usa esse atributo para identificar o campo a ser preenchido.
Valide os elementos do formulário verificando o painel "Rede" no DevTools. Quando você seleciona um endereço de e-mail, o navegador aciona o DNS e as consultas de pesquisa de conta subsequentes para o provedor e o emissor de e-mail. Essas são solicitações internas do navegador. Seu site não recebe nada até o envio do formulário.
Validar o EVT
Há cinco etapas para validar cada componente do pacote EVT.
- Analise o token.
- Valide os valores esperados.
- Validar a vinculação de teclas.
- Validar o registro DNS.
- descobrir o emissor e verificar a assinatura do EVT.
1. Analisar o token
Os dados brutos do envio do formulário contêm o EVT e declarações assinadas em um
JSON Web Token de divulgação seletiva
(SD-JWT+KB) separados por um til
(caractere ~). É necessário separar esses elementos e decodificar os cabeçalhos e payloads de
assinatura e criptografia de objetos JavaScript (JOSE, na sigla em inglês), por exemplo, usando
jose para Node.js.
Se example.com verificar demo@gmail.com, o payload decodificado será semelhante ao exemplo a seguir:
{
"evtJwtDecodedPayload": {
"cnf": {
"jwk": {
"crv": "Ed25519",
"kty": "OKP",
"x": "pUbLiCkEy123pUbLiCkEy123pUbLiCkEy123"
}
},
"email": "demo@gmail.com",
"email_verified": true,
"iat": 1782911685,
"iss": "https://accounts.google.com"
},
"kbJwtDecodedPayload": {
"aud": "https://example.com",
"iat": 1782911685,
"nonce": "rAnDoM123rAnDoM123rAnDoM123rAnDoM123",
"sd_hash": "hAsH456hAsH456hAsH456hAsH456hAsH456"
}
}
2. Validar valores esperados
Verifique se os valores básicos no payload correspondem aos valores fornecidos:
- Verifique se
email_verifiedestá definido comotrue. - Verifique se
emailcorresponde ao endereço de e-mail informado no formulário. - Verifique se
noncecorresponde ao nonce fornecido no formulário. - Verifique se
audcorresponde à origem do seu site. - Verifique se
iattem um carimbo de data/hora relativamente recente, por exemplo, depois que o formulário foi renderizado.
3. Validar vinculação de chave
O navegador cria uma chave temporária e efêmera para a transação e confirma
que ela assinou o token. Extraia essa chave da declaração cnf (confirmação)
no EVT e use-a para verificar o JWT vinculado à chave.
Em seguida, calcule o hash esperado e compare com a reivindicação sd_hash. O
exemplo do Node.js a seguir mostra como realizar esse cálculo:
const calculatedHash = createHash("sha256")
.update(evtJwt + "~")
.digest("base64url");
4. Validar registro DNS
Verifique o registro DNS _email-verification do domínio do endereço de e-mail. Por
exemplo, para demo@gmail.com, consulte o registro _email-verification.gmail.com TXT. Para esse provedor, a consulta retorna o local do provedor da conta, ou seja, accounts.google.com.
$ dig +short TXT _email-verification.gmail.com
"iss=accounts.google.com"
5. Descobrir o emissor e verificar a assinatura do EVT
Verifique se o emissor veicula o recurso /.well-known/email-verification, que
fornece os endpoints para emissão do token, a chave da Web JSON (JWK) para o
site e os algoritmos de assinatura compatíveis.
$ curl https://accounts.google.com/.well-known/email-verification
{
"issuance_endpoint": "https://accounts.google.com/gsi/email-verification/issue",
"jwks_uri": "https://verifiablecredentials-pa.googleapis.com/.well-known/vc-public-jwks",
"signing_alg_values_supported": ["EdDSA"]
}
Use os JWKs para verificar o JWT do EVT extraído do token. A maioria das bibliotecas JOSE fornece funções para processar essa verificação.
Se todas as etapas forem concluídas, você terá verificado o endereço de e-mail com o provedor. Caso contrário, envie um e-mail de confirmação ao usuário de acordo com seu fluxo normal.
Implementar o serviço de provedor e emissor de e-mail
Para mais detalhes, confira o código de demonstração do provedor de e-mail simulado e consulte as etapas do emissor nas propostas da API Email Verification e do protocolo Email Verification.
Como emissor, você não precisa se inscrever no teste de origem nem fornecer um token, já que o comportamento do navegador é acionado pelo site da parte confiante. Basta garantir que os endpoints esperados estejam no lugar para responder a essas solicitações.
Configurar a descoberta de emissores
Para permitir que os navegadores descubram automaticamente seus endpoints de verificação quando um
endereço de e-mail pertencente ao seu domínio for selecionado, exponha sua configuração
usando DNS e um endpoint HTTP .well-known.
Configurar um registro de delegação de DNS
Configure um registro DNS TXT no seu domínio de e-mail que delega a autoridade de verificação ao identificador do emissor. Esses identificadores podem usar o mesmo domínio, dependendo da sua infraestrutura.
Formato do registro: _email-verification.<email-domain>
Exemplo de arquivo de zona:
_email-verification.example.com IN TXT "iss=accounts.issuer.example"
Hospedar um endpoint .well-known/email-verification
Hospede um arquivo JSON de metadados no domínio do emissor no caminho /.well-known/.
Esse arquivo descreve suas capacidades de emissão e os algoritmos de assinatura
criptográfica compatíveis com sua infraestrutura.
Endpoint: https://<issuer-domain>/.well-known/email-verification
Exemplo de resposta:
{
"issuance_endpoint": "https://accounts.issuer.example/email-verification/issuance",
"jwks_uri": "https://accounts.issuer.example/.well-known/vc-public-jwks",
"signing_alg_values_supported": ["EdDSA", "ES256"]
}
Hospedar um endpoint .well-known/web-identity
Um recurso JSON .well-known adicional que você já pode ter implementado como parte da API Federated Credentials (FedCM).
Isso fornece links para o endpoint de contas e o URL de login.
Endpoint: https://<domain>/.well-known/web-identity
Exemplo de resposta:
{
"accounts_endpoint": "https://accounts.issuer.example/accounts",
"login_url": "https://accounts.issuer.example/login"
}
Usar um endpoint de contas
O endpoint "accounts" da API FedCM fornece uma lista de contas conectadas no momento. O exemplo a seguir mostra uma resposta mínima. Para mais detalhes, consulte o guia de implementação do provedor de identidade.
Endpoint: conforme especificado em .well-known/web-identity
Veja a seguir um exemplo de resposta:
{
"accounts": [
{
"id": "demo-example",
"name": "Demo User",
"email": "demo@example.com",
"given_name": "Demo"
}
]
}
Integrar com a API Login Status
O usuário precisa ter uma sessão ativa com o provedor, e você precisa sinalizar isso ao navegador com a API Login Status.
Quando um usuário fizer login ou sair, veicule o cabeçalho de resposta HTTP correspondente:
Set-Login: logged-in
Set-Login: logged-out
Como alternativa, atualize o status usando JavaScript no contexto do aplicativo da Web:
navigator.login.setStatus("logged-in");
navigator.login.setStatus("logged-out");
Processar solicitações de emissão
Seu issuance_endpoint recebe uma solicitação POST application/x-www-form-urlencoded
que contém o request_token.
As seções a seguir mostram o processo completo de tratamento de solicitações de emissão.
1. Validar a solicitação de emissão
Analise e valide payloads de navegadores recebidos:
- Método:
POST - Verificação de sessão:valide os cookies próprios
session/authenticationdo usuário transmitidos com a solicitação para garantir que um contexto de identidade ativo e autorizado exista. - Verificação de parâmetros:extraia o parâmetro
request_token(um JWT assinado gerado pelo navegador). Verifique se ele contém a chave pública efêmera esperada, o e-mail de destino, o público-alvo correto e um carimbo de data/hora válido.
O token decodificado vai ficar assim:
{
"decodedHeader": {
"alg": "ES256",
"typ": "JWT",
"jwk": {
"kty": "EC",
"crv": "P-256",
"x": "pUbLiCKeY123pUbLiCKeY123pUbLiCKeY123",
"y": "pUbLiCKeY456pUbLiCKeY456pUbLiCKeY456"
}
},
"decodedPayload": {
"iss": "https://accounts.issuer.example",
"sub": "demo@example.com",
"email": "demo@example.com",
"iat": 1780272000,
"exp": 1780272300
},
"signature": "SIGnatURE-123_SIGnatURE-123_SIGnatURE-123"
}
2. Responder com um token
Após a validação da sessão e do token de solicitação, gere um JWT de divulgação seletiva (SD-JWT, na sigla em inglês) assinado usando o payload:
{
"iss": "https://accounts.issuer.example",
"iat": 1780272000,
"exp": 1780272300,
"cnf": {
"jwk": {
"kty": "EC",
"crv": "P-256",
"x": "pUbLiCKeY123pUbLiCKeY123pUbLiCKeY123",
"y": "pUbLiCKeY456pUbLiCKeY456pUbLiCKeY456"
}
},
"email": "demo@example.com",
"email_verified": true
}
Assine o payload usando sua chave privada e um algoritmo compatível. Por exemplo, usando jose em Node.js:
const evtJwt = await new SignJWT(evtPayload)
.setProtectedHeader({
alg: "EdDSA",
kid: PRIVATE_KEY_JWK.kid, // Key ID corresponding to our JWKS keys
typ: "evt+jwt", // Standard Token Type for EVTs
})
.sign(privateKey);
// Standard SD-JWT compatibility requires appending a trailing tilde "~"
// to separate the signed token from the key binding section.
const issuanceToken = `${evtJwt}~`;
Exemplo de resposta de sucesso (HTTP 200):
{
"issuance_token": "tOkEn123tOkEn123tOkEn123...~"
}
Considerações sobre o teste de origem
Os testes de origem são experimentos para coletar feedback. Por isso, sua participação é fundamental se você participar como uma parte confiante ou um provedor de identidade. Para informar problemas, use os seguintes repositórios do GitHub:
- API Browser Email Verification: WICG/email-verification
- Protocolo de verificação de e-mail: dickhardt/email-verification
Se você encontrar bugs na implementação do Chrome, registre um bug no componente:
A ativação da funcionalidade de teste de origem é controlada por resposta com a inclusão do token do OT. Isso significa que você tem controle refinado se preferir restringir a funcionalidade a uma parte dos seus usuários. Por exemplo, se você já tiver uma estrutura de teste A/B, poderá integrar o teste de origem nela para uma população de experimentos controlada. Se você tiver um grupo de usuários para teste beta ou acesso antecipado, talvez seja necessário ativar o recurso para eles. Nesse caso, verifique o endereço de e-mail fornecido antes de emitir ou validar o token.
Os testes de origem também têm limites de tráfego para minimizar a dependência dos sites no recurso antes do lançamento. A API do emissor está em desenvolvimento, e você pode esperar mudanças incompatíveis com versões anteriores, além de atualizações na experiência do usuário do Chrome.
Vamos postar mais atualizações no blog aqui e na lista de e-mails evp-announce@chromium.org à medida que o desenvolvimento avança.