Ngày xuất bản: 8 tháng 7 năm 2026
Khi thu thập địa chỉ email trong quá trình đăng ký, đăng nhập, đăng ký thuê bao, thanh toán, khôi phục tài khoản hoặc quy trình khác, bạn thường phải xác nhận rằng địa chỉ email đó thuộc về người nhập. Các phương thức xác minh hiện có, chẳng hạn như mật khẩu dùng một lần (OTP) hoặc đường liên kết xác minh email (đường liên kết ma thuật), yêu cầu người dùng rời khỏi trang web của bạn. Quy trình gây gián đoạn này có thể làm tăng nguy cơ người dùng (dù là người hay tác nhân) bỏ hoàn toàn phiên và không bao giờ hoàn tất quy trình xác thực.
Email Verification API là một đề xuất cho phép trình duyệt giao tiếp trực tiếp với nhà cung cấp email để xác minh rằng người dùng sở hữu địa chỉ email đó. Người dùng chọn một email trong tính năng tự động điền hoặc đề xuất tự động hoàn thành của trình duyệt, gửi biểu mẫu và trang web sẽ xác minh địa chỉ email với nhà cung cấp mà không cần gửi email hoặc làm gián đoạn quy trình của người dùng.
Việc thu thập email là một điểm chuyển đổi quan trọng trong hành trình của người dùng. Chrome muốn nhận ý kiến phản hồi về đề xuất này từ các trang web muốn xác minh email, nhà cung cấp email có thể thực hiện quy trình xác minh, và người dùng đang trải qua quy trình này. Bạn có thể đăng ký dùng thử theo nguyên gốc ngay hôm nay và làm theo hướng dẫn triển khai tại đây. Để biết cấu hình dùng thử theo nguyên gốc chung, hãy tham khảo bài viết Bắt đầu dùng thử theo nguyên gốc này.
Bạn có thể thử quy trình này bằng tài khoản minh hoạ:
- Bản minh hoạ về tổ chức phát hành cung cấp cho bạn một tài khoản email mô phỏng và phiên
- Bản minh hoạ về trình xác minh sẽ xác minh mọi nhà cung cấp tham gia
Quy trình xác minh email
Các phần sau đây giải thích những điều bạn và người dùng cần để bắt đầu quy trình xác minh email, cũng như toàn bộ quy trình làm việc khi sử dụng Giao thức xác minh email.
Từ khoá
Các từ khoá cho Email Verification API như sau:
- Trình xác minh: Trang web thu thập địa chỉ email và muốn xác minh địa chỉ đó. Trình xác minh còn được gọi là Bên tin cậy.
- Nhà cung cấp email: Dịch vụ cung cấp địa chỉ email của người dùng, ví dụ:
gmail.com. - Tổ chức phát hành: Dịch vụ quản lý tài khoản cho email của người dùng, ví dụ:
accounts.google.com. Tổ chức phát hành còn được gọi là Nhà cung cấp danh tính.
Trong một số trường hợp, nhà cung cấp email và tổ chức phát hành có thể hoạt động trên cùng một miền. Tuy nhiên, bạn cần phân biệt giữa việc có địa chỉ email và có phiên hoạt động cho tài khoản được liên kết.
Điều kiện tiên quyết
- Người dùng phải đăng nhập vào nhà cung cấp email hoặc tổ chức phát hành trên cùng một hồ sơ trình duyệt. Ví dụ: nếu sử dụng Gmail, họ phải đăng nhập vào Tài khoản Google.
- Là một trang web trình xác minh tham gia, bạn phải đăng ký dùng thử theo nguyên gốc và cung cấp mã thông báo trên cùng một trang với biểu mẫu email.
Người dùng phải chọn địa chỉ email của họ trong trình đơn thả xuống tự động điền hoặc tự động hoàn thành.
- Nếu người dùng đã nhập địa chỉ email vào trường này trước đó, thì địa chỉ đó sẽ được cung cấp bằng tính năng tự động hoàn thành.
Nếu người dùng đã thêm địa chỉ email của họ bằng chế độ cài đặt "Tự động điền và mật khẩu" của Chrome (
chrome://settings/autofill), thì địa chỉ đó sẽ được cung cấp bằng tính năng tự động điền.
Lần đầu tiên người dùng cung cấp địa chỉ email để xác minh, họ sẽ thấy lời nhắc về quyền. Điều này chỉ xảy ra một lần cho mỗi địa chỉ email.
Sau khi có phiên hoạt động đó trong trình duyệt, người dùng có thể bắt đầu quy trình:
- Trên biểu mẫu có trường email, người dùng chọn địa chỉ email của họ trong trình đơn thả xuống tự động hoàn thành. Trang web trình xác minh cung cấp một trường ẩn trong biểu mẫu có nonce cho mỗi thực thể để xác thực yêu cầu này.
Sau đó, trình duyệt sẽ truy xuất bản ghi DNS xác minh email cho miền email. Thao tác này sẽ trỏ trình duyệt đến tổ chức phát hành. Sau đó, tổ chức phát hành sẽ xác nhận rằng họ có phiên hoạt động cho địa chỉ email đó.
Sau đó, tổ chức phát hành sẽ cung cấp Mã thông báo xác minh email (EVT) cho địa chỉ đó. Trình duyệt kết hợp mã đó thành một JWT liên kết với khoá cùng với EVT, nguồn gốc trang web và nonce từ biểu mẫu nhập.
Khi biểu mẫu được gửi, gói EVT sẽ được thêm vào trường ẩn và gửi đến trang web.
Sau đó, trang web trình xác minh sẽ xác minh từng thông tin chi tiết đó: địa chỉ email dự kiến, nonce và chữ ký từ trình duyệt và tổ chức phát hành.
Người dùng sẽ thấy một thông báo nhỏ cho biết rằng nhà cung cấp email đã xác minh địa chỉ của họ.
Quy trình này cung cấp cho trang web trình xác minh thông tin xác nhận rằng địa chỉ email là hợp lệ và thuộc về người dùng hiện tại, nghĩa là trang web có thể bỏ qua việc gửi email xác minh.
Người dùng có thể quản lý các email đã xác minh trong phần Cài đặt > Tự động điền và mật khẩu > Thông tin liên hệ > Email đã xác minh (hoặc mở chrome://settings/contactInfo).
Những điểm cần cân nhắc về trường hợp sử dụng
Xác minh email là một tính năng nâng cao dần dần cho quy trình hiện có của bạn, giúp người dùng không cần rời khỏi trang web của bạn để truy xuất OTP hoặc nhấp vào đường liên kết. Các trang web có thể thêm các trường xác minh email vào tất cả biểu mẫu có liên quan, chẳng hạn như biểu mẫu đăng nhập, đăng ký nhận bản tin, tạo tài khoản và khôi phục mật khẩu. EVP chỉ kích hoạt nếu trình duyệt hỗ trợ. Nếu không nhận được mã khi gửi hoặc bất kỳ bước xác thực nào không thành công, bạn có thể quay lại quy trình xác nhận email mặc định. Điều này cũng có nghĩa là không có tính năng phát hiện cho API; trang web trình xác minh coi EVT là không bắt buộc, xử lý EVT nếu có trong yêu cầu.
Xác minh email xác nhận rằng người dùng có phiên hoạt động với nhà cung cấp địa chỉ email của họ. Tính năng này không xác minh rằng email của bạn đã đến được người dùng. Bạn vẫn có thể muốn gửi email chào mừng hoặc email hướng dẫn hiện có và có thể muốn hoặc cần nhắc người dùng kiểm tra chế độ cài đặt thư rác.
Triển khai trang web trình xác minh
Để biết thêm thông tin chi tiết, bạn có thể xem qua mã minh hoạ từ đầu đến cuối và tham khảo các bước xác thực trong đề xuất Email Verification API và Giao thức xác minh email .
Định cấu hình các trường biểu mẫu
Đảm bảo các trường biểu mẫu của bạn có các thuộc tính chính xác:
<input
name="email-address"
type="email"
autocomplete="email">
<input
type="hidden"
name="token"
nonce="rAnD0m-VaLuE"
autocomplete="email-verification-token">
Đặt thuộc tính type và autocomplete của dữ liệu đầu vào email thành email để cho phép trình duyệt cung cấp tính năng tự động hoàn thành cho địa chỉ email.
Trường hidden mới sẽ được điền mã thông báo xác minh email khi gửi biểu mẫu. Các thuộc tính cần thiết là:
- Đặt
type="hidden"vì trường này không yêu cầu người dùng nhập. - Đặt
nonce="rAnD0m-VaLuE". Trang web phải cung cấp nonce duy nhất liên kết với phiên để xác minh việc gửi biểu mẫu. - Đặt
autocomplete="email-verification-token". Trình duyệt sử dụng thuộc tính này để xác định trường cần điền.
Xác thực các phần tử biểu mẫu bằng cách kiểm tra bảng điều khiển Mạng trong Công cụ cho nhà phát triển. Khi bạn chọn một địa chỉ email, bạn sẽ thấy trình duyệt kích hoạt DNS và các truy vấn tìm kiếm tài khoản tiếp theo cho nhà cung cấp email và tổ chức phát hành. Đây là các yêu cầu nội bộ của trình duyệt; trang web của bạn không nhận được gì cho đến khi gửi biểu mẫu.
Xác thực EVT
Có 5 bước để xác thực từng thành phần của gói EVT.
- Phân tích cú pháp mã thông báo.
- Xác thực các giá trị dự kiến.
- Xác thực việc liên kết khoá.
- Xác thực bản ghi DNS.
- khám phá tổ chức phát hành và xác minh chữ ký EVT.
1. Phân tích cú pháp mã thông báo
Dữ liệu thô từ việc gửi biểu mẫu chứa EVT và các yêu cầu đã ký trong a
Mã thông báo web JSON tiết lộ có chọn lọc
(SD-JWT+KB) được phân tách bằng dấu ngã
(~ ký tự). Bạn sẽ cần phân tách các mã này và giải mã các tiêu đề và tải trọng Ký và mã hoá đối tượng JavaScript (JOSE) (ví dụ: bằng cách sử dụng
jose cho Node.js).
Nếu example.com xác minh demo@gmail.com, thì tải trọng đã giải mã sẽ có dạng như ví dụ sau:
{
"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. Xác thực các giá trị dự kiến
Kiểm tra để đảm bảo rằng các giá trị cơ bản trong tải trọng khớp với các giá trị mà bạn cung cấp:
- Xác minh rằng
email_verifiedđược đặt thànhtrue. - Xác minh rằng
emailkhớp với địa chỉ email được cung cấp trong biểu mẫu của bạn. - Xác minh rằng
noncekhớp với nonce được cung cấp trong biểu mẫu của bạn. - Xác minh rằng
audkhớp với nguồn gốc của trang web. - Xác minh rằng
iatcó dấu thời gian tương đối gần đây, ví dụ: sau khi biểu mẫu được kết xuất.
3. Xác thực việc liên kết khoá
Trình duyệt tạo một khoá tạm thời, ngắn hạn cho giao dịch để xác nhận rằng khoá đó đã ký mã thông báo. Trích xuất khoá này từ yêu cầu cnf (xác nhận) trong EVT, sau đó sử dụng khoá này để xác minh JWT liên kết với khoá.
Sau đó, hãy tính toán hàm băm dự kiến và so sánh với yêu cầu sd_hash. Ví dụ sau đây về Node.js cho thấy cách thực hiện tính toán này:
const calculatedHash = createHash("sha256")
.update(evtJwt + "~")
.digest("base64url");
4. Xác thực bản ghi DNS
Xác minh bản ghi DNS _email-verification cho miền địa chỉ email. Ví dụ: đối với demo@gmail.com, hãy truy vấn bản ghi _email-verification.gmail.com TXT. Đối với nhà cung cấp này, truy vấn sẽ trả về vị trí của nhà cung cấp tài khoản, tức là accounts.google.com.
$ dig +short TXT _email-verification.gmail.com
"iss=accounts.google.com"
5. Khám phá tổ chức phát hành và xác minh chữ ký EVT
Đảm bảo tổ chức phát hành phân phát tài nguyên /.well-known/email-verification, cung cấp các điểm cuối để phát hành mã thông báo, Khoá web JSON (JWK) cho trang web và các thuật toán ký được hỗ trợ.
$ 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"]
}
Sử dụng JWK để xác minh JWT EVT mà bạn đã trích xuất từ mã thông báo. Hầu hết các thư viện JOSE đều cung cấp các hàm để xử lý quy trình xác minh này.
Nếu cả 5 bước đều thành công, bạn đã xác minh địa chỉ email với nhà cung cấp. Nếu không, hãy quay lại việc gửi email xác nhận cho người dùng theo quy trình thông thường.
Triển khai dịch vụ tổ chức phát hành và nhà cung cấp email
Để biết thêm thông tin chi tiết, bạn có thể xem qua mã minh hoạ về nhà cung cấp email mô phỏng và tham khảo các bước của tổ chức phát hành trong đề xuất Email Verification API và Giao thức xác minh email.
Là tổ chức phát hành, bạn không cần đăng ký dùng thử theo nguyên gốc hoặc cung cấp mã thông báo vì hành vi của trình duyệt được kích hoạt bởi trang web bên tin cậy. Bạn chỉ cần đảm bảo các điểm cuối dự kiến đã được thiết lập để phản hồi các yêu cầu đó.
Định cấu hình tính năng khám phá tổ chức phát hành
Để cho phép trình duyệt tự động khám phá các điểm cuối xác minh khi một địa chỉ email thuộc miền của bạn được chọn, hãy hiển thị cấu hình của bạn bằng DNS và điểm cuối HTTP .well-known.
Định cấu hình bản ghi uỷ quyền DNS
Định cấu hình bản ghi DNS TXT trên miền email của bạn để uỷ quyền xác minh cho mã nhận dạng tổ chức phát hành. Các mã nhận dạng này có thể sử dụng cùng một miền tuỳ thuộc vào cơ sở hạ tầng của bạn.
Định dạng bản ghi: _email-verification.<email-domain>
Tệp vùng mẫu:
_email-verification.example.com IN TXT "iss=accounts.issuer.example"
Lưu trữ điểm cuối .well-known/email-verification
Lưu trữ tệp siêu dữ liệu JSON trên miền tổ chức phát hành của bạn theo đường dẫn /.well-known/.
Tệp này trình bày các khả năng phát hành và thuật toán ký mật mã mà cơ sở hạ tầng của bạn hỗ trợ.
Điểm cuối: https://<issuer-domain>/.well-known/email-verification
Ví dụ về phản hồi:
{
"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"]
}
Lưu trữ điểm cuối .well-known/web-identity
Một tài nguyên JSON .well-known bổ sung mà bạn có thể đã triển khai như
một phần của API Thông tin xác thực liên kết (FedCM).
Tài nguyên này cung cấp các đường liên kết đến điểm cuối tài khoản và URL đăng nhập của bạn.
Điểm cuối: https://<domain>/.well-known/web-identity
Ví dụ về phản hồi:
{
"accounts_endpoint": "https://accounts.issuer.example/accounts",
"login_url": "https://accounts.issuer.example/login"
}
Sử dụng điểm cuối tài khoản
Điểm cuối tài khoản từ FedCM API cung cấp danh sách các tài khoản đã đăng nhập tại thời điểm đó. Ví dụ sau đây cho thấy một phản hồi tối thiểu. Để biết thêm thông tin chi tiết, hãy tham khảo hướng dẫn triển khai nhà cung cấp danh tính guide.
Điểm cuối: như được chỉ định trong .well-known/web-identity
Sau đây là ví dụ về phản hồi:
{
"accounts": [
{
"id": "demo-example",
"name": "Demo User",
"email": "demo@example.com",
"given_name": "Demo"
}
]
}
Tích hợp với Login Status API
Người dùng cần có phiên hoạt động với nhà cung cấp và bạn phải báo hiệu điều đó cho trình duyệt bằng Login Status API.
Khi người dùng đăng nhập hoặc đăng xuất thành công, hãy phân phát tiêu đề phản hồi HTTP phù hợp:
Set-Login: logged-in
Set-Login: logged-out
Ngoài ra, hãy cập nhật trạng thái bằng JavaScript trong ngữ cảnh ứng dụng web của bạn:
navigator.login.setStatus("logged-in");
navigator.login.setStatus("logged-out");
Xử lý yêu cầu phát hành
issuance_endpoint của bạn nhận được yêu cầu application/x-www-form-urlencoded POST chứa request_token.
Các phần sau đây cho thấy toàn bộ quy trình xử lý yêu cầu phát hành.
1. Xác thực yêu cầu phát hành
Phân tích cú pháp và xác thực tải trọng trình duyệt đến:
- Phương thức:
POST - Xác minh phiên: Xác thực cookie
session/authenticationcủa bên thứ nhất của người dùng được truyền cùng với yêu cầu để đảm bảo tồn tại ngữ cảnh danh tính đang hoạt động và được uỷ quyền. - Xác minh tham số: Trích xuất tham số
request_token(JWT đã ký do trình duyệt tạo). Xác minh rằng tham số này chứa khoá công khai ngắn hạn dự kiến, email mục tiêu, đối tượng chính xác và dấu thời gian hợp lệ.
Mã thông báo đã giải mã sẽ có dạng như sau:
{
"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. Phản hồi bằng mã thông báo
Sau khi xác thực thành công mã thông báo phiên và yêu cầu, hãy tạo JWT Tiết lộ có chọn lọc (SD-JWT) đã ký bằng tải trọng:
{
"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
}
Ký tải trọng bằng khoá riêng tư và thuật toán được hỗ trợ. Ví dụ: sử dụng jose trong 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}~`;
Ví dụ về phản hồi thành công (HTTP 200):
{
"issuance_token": "tOkEn123tOkEn123tOkEn123...~"
}
Những điểm cần cân nhắc về bản dùng thử theo nguyên gốc
Bản dùng thử theo nguyên gốc là các thử nghiệm để thu thập ý kiến phản hồi, vì vậy, ý kiến đóng góp của bạn là rất quan trọng nếu bạn tham gia với vai trò là bên tin cậy hoặc nhà cung cấp danh tính. Để báo cáo vấn đề, hãy sử dụng các kho lưu trữ GitHub sau:
- Email Verification API của trình duyệt: WICG/email-verification
- Giao thức xác minh email: dickhardt/email-verification
Nếu bạn gặp lỗi trong quá trình triển khai Chrome, hãy báo cáo lỗi cho thành phần:
Việc bật chức năng dùng thử theo nguyên gốc được kiểm soát trên cơ sở mỗi phản hồi bằng cách bạn đưa mã thông báo OT vào. Điều này có nghĩa là bạn có quyền kiểm soát chi tiết nếu muốn hạn chế chức năng này cho một phần người dùng. Ví dụ: nếu đã có khung thử nghiệm A/B, bạn có thể tích hợp bản dùng thử theo nguyên gốc vào đó cho một nhóm thử nghiệm có kiểm soát. Ngoài ra, nếu có nhóm người dùng thử nghiệm phiên bản thử nghiệm hoặc bản xem trước sớm, bạn có thể muốn hoặc cần bật tính năng này cho họ. Trong trường hợp này, hãy kiểm tra địa chỉ email được cung cấp trước khi phát hành hoặc xác thực mã thông báo.
Bản dùng thử theo nguyên gốc cũng có giới hạn về lưu lượng truy cập để giảm thiểu các trang web dựa vào tính năng này trước khi ra mắt. API tổ chức phát hành đang được phát triển và bạn sẽ thấy các thay đổi không tương thích ngược cùng với các bản cập nhật cho Chrome UX.
Chúng tôi sẽ đăng thêm thông tin cập nhật trên blog tại đây và trên evp-announce@chromium.org khi quá trình phát triển tiến triển.