Dipublikasikan: 8 Juli 2026, Terakhir diperbarui: 5 Oktober 2026
Saat mengumpulkan alamat email sebagai bagian dari proses pendaftaran, login, berlangganan, checkout, pemulihan akun, atau proses lainnya, praktik umum yang dilakukan adalah mengonfirmasi bahwa alamat email tersebut dimiliki oleh orang yang memasukkannya. Metode verifikasi yang ada, seperti sandi sekali pakai (OTP) atau link verifikasi email (link ajaib), mengharuskan pengguna keluar dari situs Anda. Proses yang mengganggu ini dapat meningkatkan risiko pengguna, baik manusia maupun agen, menghentikan sesi mereka sepenuhnya dan tidak pernah menyelesaikan proses autentikasi mereka.
Email Verification API adalah proposal yang memungkinkan browser berkomunikasi langsung dengan penyedia email untuk memverifikasi bahwa pengguna memiliki alamat email tersebut. Pengguna memilih email dari saran isi otomatis atau pelengkapan otomatis browser, mengirimkan formulir, dan situs memverifikasi alamat email dengan penyedia tanpa mengirim email atau mengganggu alur pengguna.
Pengumpulan email adalah titik konversi penting dalam perjalanan pengguna, dan Chrome ingin mendapatkan masukan tentang proposal ini dari situs yang ingin memverifikasi email, penyedia email yang dapat melakukan verifikasi, dan pengguna yang mengalami proses ini. Anda dapat mendaftar uji coba origin hari ini dan mengikuti petunjuk penerapan di sini. Untuk konfigurasi uji coba origin umum, lihat Memulai uji coba origin.
Anda dapat mencoba alur dengan akun demo:
- Demo penerbit memberi Anda akun dan sesi email tiruan
- Demo verifier akan memverifikasi penyedia yang berpartisipasi
Alur verifikasi email
Bagian berikut menjelaskan hal-hal yang perlu Anda dan pengguna lakukan untuk memulai alur verifikasi email, dan seluruh alur kerja saat menggunakan Protokol Verifikasi Email.
Istilah utama
Istilah utama untuk Email Verification API adalah sebagai berikut:
- Pemverifikasi: Situs yang mengumpulkan alamat email dan ingin memverifikasinya. Verifier juga disebut Pihak Tepercaya.
- Penyedia Email: Layanan yang menyediakan alamat email pengguna, misalnya
gmail.com. - Penerbit: Layanan yang mengelola akun untuk email pengguna, misalnya
accounts.google.com. Penerbit juga disebut Penyedia Identitas.
Dalam beberapa kasus, penyedia email dan penerbit mungkin beroperasi dari domain yang sama. Namun, penting untuk membedakan antara memiliki alamat email dan memiliki sesi aktif untuk akun terkait.
Prasyarat
- Pengguna harus login ke penyedia atau penerbit emailnya di profil browser yang sama. Misalnya, jika mereka menggunakan Gmail, mereka harus login ke Akun Google mereka.
- Sebagai situs verifikasi yang berpartisipasi, Anda harus mendaftar ke uji coba origin dan memberikan token di halaman yang sama dengan formulir email Anda.
Pengguna harus memilih alamat email mereka dari menu drop-down isi otomatis atau pelengkapan otomatis.
- Jika pengguna sebelumnya telah memasukkan alamat email di kolom, alamat email tersebut akan ditawarkan menggunakan pelengkapan otomatis.
Jika pengguna telah menambahkan alamat emailnya menggunakan setelan Chrome "Isi otomatis dan sandi" (
chrome://settings/autofill), alamat email tersebut akan ditawarkan menggunakan isi otomatis.
Saat pertama kali memberikan alamat email untuk verifikasi, pengguna akan melihat dialog izin. Hal ini hanya terjadi satu kali per alamat email.
Setelah pengguna memiliki sesi aktif tersebut di browser, mereka dapat memulai proses:
- Pada formulir dengan kolom email, pengguna memilih alamat emailnya dari drop-down pelengkapan otomatis. Situs verifikasi menyediakan kolom tersembunyi dalam formulir dengan nonce per instance untuk memvalidasi permintaan ini.
Kemudian, browser akan mengambil data DNS verifikasi email untuk domain email. Tindakan ini mengarahkan browser ke penerbit. Kemudian, penerbit akan mengonfirmasi bahwa mereka memiliki sesi aktif untuk alamat email tersebut.
Kemudian, penerbit akan memberikan Token Verifikasi Email (EVT) untuk alamat tersebut. Browser menggabungkannya menjadi JWT terikat kunci dengan EVT, origin situs, dan nonce dari formulir input.
Saat formulir dikirimkan, paket EVT ditambahkan ke kolom tersembunyi dan dikirim ke situs.
Situs verifikasi kemudian memverifikasi setiap detail tersebut: alamat email yang diharapkan, nonce, dan tanda tangan dari browser dan penerbit.
Pengguna akan melihat notifikasi kecil yang memberi tahu mereka bahwa penyedia email mereka telah memverifikasi alamat mereka.
Proses ini memberikan konfirmasi kepada situs pemverifikasi bahwa alamat email valid dan dimiliki oleh pengguna saat ini, yang berarti situs dapat melewati pengiriman email verifikasi.
Pengguna dapat mengelola email terverifikasi mereka di bagian Setelan > Isi otomatis dan sandi > Info kontak > Email Terverifikasi (atau buka
chrome://settings/contactInfo).
Pertimbangan kasus penggunaan
Verifikasi email adalah peningkatan progresif pada alur yang ada yang menghilangkan kebutuhan pengguna untuk keluar dari situs Anda guna mengambil OTP atau mengklik link. Situs dapat menambahkan kolom verifikasi email ke semua formulir yang relevan, seperti login, pendaftaran newsletter, pembuatan akun, dan pemulihan sandi. EVP dipicu hanya jika browser mendukungnya. Jika tidak ada kode yang diterima saat pengiriman atau salah satu langkah validasi gagal, Anda dapat kembali ke alur konfirmasi email default. Artinya, tidak ada deteksi fitur untuk API; situs verifikasi memperlakukan EVT sebagai opsional, memprosesnya jika ada dalam permintaan.
Verifikasi email mengonfirmasi bahwa pengguna memiliki sesi aktif dengan penyedia alamat emailnya. Email ini tidak memverifikasi bahwa email Anda telah sampai kepada pengguna. Anda mungkin masih ingin mengirim email selamat datang atau aktivasi yang sudah ada dan mungkin ingin atau perlu meminta pengguna untuk memeriksa setelan spam mereka.
Menerapkan situs verifikasi
Untuk mengetahui detail tambahan, Anda dapat mempelajari kode demo menyeluruh dan melihat langkah-langkah validasi dalam proposal Email Verification API dan Email Verification Protocol.
Mengonfigurasi kolom formulir
Pastikan kolom formulir Anda memiliki atribut yang benar:
<input
name="email-address"
type="email"
autocomplete="email">
<input
type="hidden"
name="token"
nonce="rAnD0m-VaLuE"
autocomplete="email-verification-token">
Tetapkan atribut type dan autocomplete input email ke email agar browser menawarkan pelengkapan otomatis untuk alamat email.
Kolom hidden baru akan diisi dengan token verifikasi email saat
pengiriman formulir. Atribut yang diperlukan adalah:
- Tetapkan
type="hidden"karena kolom ini tidak memerlukan input pengguna. - Setel
nonce="rAnD0m-VaLuE". Situs harus memberikan nonce terikat sesi yang unik untuk memverifikasi pengiriman formulir. - Setel
autocomplete="email-verification-token". Browser menggunakan atribut ini untuk mengidentifikasi kolom yang akan diisi.
Validasi elemen formulir Anda dengan memeriksa panel Jaringan di DevTools. Saat Anda memilih alamat email, Anda akan melihat browser memicu DNS dan kueri pencarian akun berikutnya untuk penyedia dan penerbit email. Ini adalah permintaan browser internal; situs Anda tidak menerima apa pun hingga pengiriman formulir.
Memvalidasi EVT
Ada lima langkah untuk memvalidasi setiap komponen paket EVT.
- Parse token.
- Validasi nilai yang diharapkan.
- Validasi binding tombol.
- Validasi data DNS.
- menemukan penerbit dan memverifikasi tanda tangan EVT.
1. Mengurai token
Data mentah dari pengiriman formulir berisi EVT dan klaim bertanda tangan dalam
Selective Disclosure JSON Web Token
(SD-JWT+KB) yang dipisahkan oleh tilde
(karakter ~). Anda harus memisahkan header dan payload Penandatanganan dan Enkripsi Objek Javascript (JOSE) ini dan mendekodenya (misalnya dengan menggunakan
jose untuk Node.js).
Jika example.com memverifikasi demo@gmail.com, payload yang didekode akan terlihat mirip dengan
contoh berikut:
{
"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. Memvalidasi nilai yang diharapkan
Periksa apakah nilai dasar dalam payload cocok dengan nilai yang Anda berikan:
- Pastikan
email_verifieddisetel ketrue. - Pastikan
emailcocok dengan alamat email yang diberikan dalam formulir Anda. - Pastikan
noncecocok dengan nonce yang diberikan dalam formulir Anda. - Pastikan
audcocok dengan asal situs Anda. - Pastikan
iatmemiliki stempel waktu yang relatif baru, misalnya, setelah formulir dirender.
3. Memvalidasi pengikatan tombol
Browser membuat kunci sementara dan singkat untuk transaksi guna mengonfirmasi
bahwa browser menandatangani token. Ekstrak kunci ini dari klaim cnf (konfirmasi)
di EVT, lalu gunakan untuk memverifikasi JWT terikat kunci.
Kemudian, hitung hash yang diharapkan dan bandingkan dengan klaim sd_hash. Contoh Node.js berikut menunjukkan cara melakukan penghitungan ini:
const calculatedHash = createHash("sha256")
.update(evtJwt + "~")
.digest("base64url");
4. Memvalidasi data DNS
Verifikasi data DNS _email-verification untuk domain alamat email. Misalnya, untuk demo@gmail.com, kueri rekaman _email-verification.gmail.com TXT. Untuk penyedia ini, kueri menampilkan lokasi penyedia akun, yaitu accounts.google.com.
$ dig +short TXT _email-verification.gmail.com
"iss=accounts.google.com"
5. Temukan penerbit dan verifikasi tanda tangan EVT
Pastikan penerbit menyediakan resource /.well-known/email-verification, yang
menyediakan endpoint untuk menerbitkan token, Kunci Web JSON (JWK) untuk
situs, dan algoritma penandatanganan yang didukung.
$ 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"]
}
Gunakan JWK untuk memverifikasi JWT EVT yang Anda ekstrak dari token. Sebagian besar library JOSE menyediakan fungsi untuk menangani verifikasi ini.
Jika kelima langkah berhasil, Anda telah memverifikasi alamat email terhadap penyedia. Jika tidak, kirim email konfirmasi kepada pengguna sesuai dengan alur normal Anda.
Menerapkan layanan penerbit dan penyedia email
Untuk mengetahui detail tambahan, Anda dapat mempelajari kode demo penyedia email tiruan dan melihat langkah-langkah penerbit dalam proposal Email Verification API dan Email Verification Protocol.
Sebagai penerbit, Anda tidak perlu mendaftar ke uji coba origin atau memberikan token karena perilaku browser dipicu oleh situs pihak tepercaya. Anda hanya perlu memastikan bahwa endpoint yang diharapkan sudah ada untuk merespons permintaan tersebut.
Mengonfigurasi penemuan penerbit
Agar browser dapat otomatis menemukan endpoint verifikasi Anda saat alamat email yang termasuk dalam domain Anda dipilih, ekspos konfigurasi Anda menggunakan DNS dan endpoint HTTP .well-known.
Mengonfigurasi data delegasi DNS
Konfigurasi data DNS TXT di domain email Anda yang mendelegasikan otoritas verifikasi ke ID penerbit Anda. ID ini dapat menggunakan domain yang sama, bergantung pada infrastruktur Anda.
Format Data: _email-verification.<email-domain>
Contoh File Zona:
_email-verification.example.com IN TXT "iss=accounts.issuer.example"
Menghosting endpoint .well-known/email-verification
Menghosting file metadata JSON di domain penerbit Anda di jalur /.well-known/.
File ini menguraikan kemampuan penerbitan Anda dan algoritma penandatanganan kriptografi yang didukung infrastruktur Anda.
Endpoint: https://<issuer-domain>/.well-known/email-verification
Contoh respons:
{
"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"]
}
Menghosting endpoint .well-known/web-identity
Resource JSON .well-known tambahan yang mungkin telah Anda terapkan sebagai bagian dari Federated Credentials (FedCM)
API.
Hal ini memberikan link ke endpoint akun dan URL login Anda.
Endpoint: https://<domain>/.well-known/web-identity
Contoh respons:
{
"accounts_endpoint": "https://accounts.issuer.example/accounts",
"login_url": "https://accounts.issuer.example/login"
}
Menggunakan endpoint akun
Endpoint akun dari FedCM API menyediakan daftar akun yang login saat ini. Contoh berikut menunjukkan respons minimal. Untuk mengetahui detail selengkapnya, lihat panduan penerapan penyedia identitas.
Endpoint: seperti yang ditentukan dalam .well-known/web-identity
Berikut adalah contoh respons:
{
"accounts": [
{
"id": "demo-example",
"name": "Demo User",
"email": "demo@example.com",
"given_name": "Demo"
}
]
}
Berintegrasi dengan Login Status API
Pengguna harus memiliki sesi aktif dengan penyedia dan Anda harus memberi sinyal ke browser dengan Login Status API.
Saat pengguna berhasil login atau logout, sajikan header respons HTTP yang cocok:
Set-Login: logged-in
Set-Login: logged-out
Atau, perbarui status menggunakan JavaScript dalam konteks aplikasi web Anda:
navigator.login.setStatus("logged-in");
navigator.login.setStatus("logged-out");
Menangani permintaan penerbitan
issuance_endpoint Anda menerima permintaan application/x-www-form-urlencoded POST
yang berisi request_token.
Bagian berikut menunjukkan proses lengkap penanganan permintaan penerbitan.
1. Memvalidasi permintaan penerbitan
Mengurai dan memvalidasi payload browser yang masuk:
- Metode:
POST - Verifikasi Sesi: Memvalidasi cookie pihak pertama
session/authenticationpengguna yang dikirimkan bersama permintaan untuk memastikan konteks identitas yang aktif dan sah ada. - Verifikasi Parameter: Ekstrak parameter
request_token(JWT bertanda tangan yang dibuat oleh browser). Verifikasi bahwa token berisi kunci publik sementara yang diharapkan, email target, audiens yang benar, dan stempel waktu yang valid.
Token yang didekode akan terlihat seperti:
{
"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. Merespons dengan token
Setelah validasi sesi dan token permintaan berhasil, buat JWT Pengungkapan Selektif (SD-JWT) yang ditandatangani menggunakan 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
}
Tandatangani payload menggunakan kunci pribadi dan algoritma yang didukung. Misalnya, menggunakan jose di 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}~`;
Contoh Respons Berhasil (HTTP 200):
{
"issuance_token": "tOkEn123tOkEn123tOkEn123...~"
}
Pertimbangan uji coba origin
Uji coba origin adalah eksperimen untuk mengumpulkan masukan, jadi masukan Anda sangat penting jika Anda berpartisipasi sebagai pihak tepercaya atau penyedia identitas. Untuk melaporkan masalah, gunakan repositori GitHub berikut:
- Browser Email Verification API: WICG/email-verification
- Protokol Verifikasi Email: dickhardt/email-verification
Jika Anda menemukan bug dalam penerapan Chrome, laporkan bug terhadap komponen:
Pengaktifan fungsi uji coba origin dikontrol berdasarkan per-respons dengan penyertaan token OT Anda. Artinya, Anda memiliki kontrol terperinci jika lebih memilih untuk membatasi fungsi tersebut pada sebagian pengguna. Misalnya, jika Anda sudah memiliki framework pengujian A/B, Anda dapat mengintegrasikan uji coba origin di sana untuk populasi eksperimen yang terkontrol. Atau, jika Anda memiliki grup pengguna pengujian beta atau pratinjau awal, Anda mungkin ingin atau perlu mengaktifkan fitur tersebut untuk mereka. Dalam hal ini, periksa alamat email yang diberikan sebelum menerbitkan atau memvalidasi token.
Uji coba origin juga memiliki batas traffic untuk meminimalkan situs yang mengandalkan fitur tersebut sebelum peluncuran. Issuer API sedang dalam pengembangan, dan Anda harus memperkirakan perubahan yang tidak kompatibel dengan versi sebelumnya bersama dengan update pada UX Chrome.
Kami akan memposting info terbaru lebih lanjut di blog ini dan di milis evp-announce@chromium.org seiring perkembangan pengembangan.