Published: July 8, 2026
عند جمع عنوان بريد إلكتروني كجزء من عملية الاشتراك أو تسجيل الدخول أو الاشتراك أو الدفع أو استرداد الحساب أو أي عملية أخرى، من الشائع تأكيد أنّ عنوان البريد الإلكتروني مملوك للشخص الذي يُدخله. تتطلّب طرق التحقّق الحالية، مثل كلمات المرور لمرة واحدة أو روابط التحقّق من البريد الإلكتروني (الروابط السحرية)، من المستخدم الانتقال إلى موقع إلكتروني آخر. يمكن أن تؤدي هذه العملية المزعجة إلى زيادة خطر تخلّي المستخدم، سواء كان شخصًا أو برنامجًا، عن جلسته بالكامل وعدم إكمال عملية المصادقة.
Email Verification API هو اقتراح يسمح للمتصفّح بالتواصل مباشرةً مع موفِّر البريد الإلكتروني للتحقّق من أنّ المستخدم يملك عنوان البريد الإلكتروني. يختار المستخدمون بريدًا إلكترونيًا من ميزة "الملء التلقائي" أو ميزة "الإكمال التلقائي" في المتصفّح، ويُرسلون النموذج، ويتحقّق الموقع الإلكتروني من عنوان البريد الإلكتروني لدى المزوِّد بدون إرسال بريد إلكتروني أو مقاطعة مسار المستخدم.
إنّ جمع عناوين البريد الإلكتروني هو نقطة إحالة ناجحة مهمة في رحلة المستخدم، ويريد Chrome الحصول على ملاحظات حول الاقتراح من المواقع الإلكترونية التي تريد التحقّق من صحة عناوين البريد الإلكتروني، ومزوِّدي البريد الإلكتروني الذين يمكنهم إجراء عملية التحقّق، والمستخدمين الذين يختبرون العملية. يمكنك الاشتراك في مرحلة التجربة والتقييم اليوم واتّباع تعليمات التنفيذ هنا. للاطّلاع على الإعداد العام لمرحلة التجربة والتقييم ، يُرجى الرجوع إلى مقالة بدء استخدام مراحل التجربة والتقييم.
يمكنك تجربة المسار باستخدام حساب تجريبي:
- يمنحك العرض التوضيحي لجهة الإصدار حساب بريد إلكتروني وجلسة وهمية
- سيتحقّق العرض التوضيحي لأداة التحقّق من أي موفِّر مشارك
مسار التحقّق من عنوان البريد الإلكتروني
توضّح الأقسام التالية ما تحتاج إليه أنت والمستخدمون لبدء مسار التحقّق من عنوان البريد الإلكتروني، وسير العمل الكامل عند استخدام بروتوكول تأكيد عنوان البريد الإلكتروني.
العبارات الرئيسية
في ما يلي العبارات الرئيسية في Email Verification API:
- أداة التحقّق: الموقع الإلكتروني الذي يجمع عنوان البريد الإلكتروني ويريد التحقّق منه. تُعرف أداة التحقّق أيضًا باسم "الجهة المستندة إلى الهوية".
- مزوِّد البريد الإلكتروني: الخدمة التي توفّر عنوان البريد الإلكتروني للمستخدم، مثل
مثال
gmail.com. - جهة الإصدار: الخدمة التي تدير حساب البريد الإلكتروني للمستخدم، مثل
مثال
accounts.google.com. تُعرف جهة الإصدار أيضًا باسم "موفِّر الهوية".
في بعض الحالات، قد يعمل مزوِّد البريد الإلكتروني وجهة الإصدار من النطاق نفسه. ومع ذلك، من المهم التمييز بين امتلاك عنوان بريد إلكتروني وامتلاك جلسة نشطة للحساب المرتبط.
المتطلبات الأساسية
- على المستخدم تسجيل الدخول إلى مزوِّد البريد الإلكتروني أو جهة الإصدار في ملف المتصفّح الشخصي نفسه. على سبيل المثال، إذا كان المستخدم يستخدم Gmail، عليه تسجيل الدخول إلى حسابه على Google.
- بصفتك موقعًا إلكترونيًا مشاركًا في التحقّق، عليك الاشتراك في مرحلة التجربة والتقييم وتقديم الرمز المميّز على الصفحة نفسها التي تحتوي على نموذج البريد الإلكتروني.
على المستخدم اختيار عنوان بريده الإلكتروني من القائمة المنسدلة لميزة "الملء التلقائي" أو ميزة "الإكمال التلقائي".
- إذا كان المستخدم قد أدخل عنوان بريد إلكتروني في الحقل من قبل، سيتم عرضه باستخدام ميزة "الإكمال التلقائي".
إذا أضاف المستخدم عنوان بريده الإلكتروني باستخدام إعدادات Chrome "الملء التلقائي وكلمات المرور" (
chrome://settings/autofill)، سيتم عرضه باستخدام ميزة "الملء التلقائي".
في المرة الأولى التي يقدّم فيها المستخدم عنوان بريد إلكتروني للتحقّق منه، سيظهر له طلب إذن. يحدث ذلك مرة واحدة فقط لكل عنوان بريد إلكتروني.
بعد أن تكون لدى المستخدم جلسة نشطة في المتصفّح، يمكنه بدء العملية:
- في نموذج يحتوي على حقل بريد إلكتروني، يختار المستخدم عنوان بريده الإلكتروني من القائمة المنسدلة لميزة "الإكمال التلقائي". يوفّر الموقع الإلكتروني لأداة التحقّق حقلًا مخفيًا في النموذج يحتوي على رقم عشوائي لكل نُسخة للتحقّق من صحة هذا الطلب.
سيسترجع المتصفّح بعد ذلك سجلّ نظام أسماء النطاقات للتحقّق من عنوان البريد الإلكتروني لنطاق البريد الإلكتروني. يشير ذلك إلى المتصفّح إلى جهة الإصدار. ستؤكّد جهة الإصدار بعد ذلك أنّ لديها جلسة نشطة لعنوان البريد الإلكتروني هذا.
ستقدّم جهة الإصدار بعد ذلك رمز التحقّق من عنوان البريد الإلكتروني (EVT) للعنوان. يجمع المتصفّح ذلك في رمز JWT مميّز مرتبط بمفتاح مع رمز EVT وأصل الموقع الإلكتروني والرقم العشوائي من نموذج الإدخال.
عند إرسال النموذج، تتم إضافة حزمة EVT إلى الحقل المخفي وإرسالها إلى الموقع الإلكتروني.
يتحقّق الموقع الإلكتروني لأداة التحقّق بعد ذلك من كل هذه التفاصيل: عنوان البريد الإلكتروني المتوقّع والرقم العشوائي والتواقيع من المتصفّح وجهة الإصدار.
يظهر للمستخدم إشعار صغير يُعلمه بأنّ مزوِّد البريد الإلكتروني قد تحقّق من عنوانه.
توفّر هذه العملية للموقع الإلكتروني لأداة التحقّق تأكيدًا بأنّ عنوان البريد الإلكتروني صالح ويخص المستخدم الحالي، ما يعني أنّه يمكن للموقع الإلكتروني تخطّي إرسال رسالة تأكيد إلكترونية.
يمكن للمستخدمين إدارة رسائلهم الإلكترونية التي تم التحقّق منها ضمن الإعدادات > الملء التلقائي وكلمات المرور > معلومات الاتصال > البريد الإلكتروني الذي تم التحقّق منه (أو فتح chrome://settings/contactInfo).
اعتبارات حالات الاستخدام
التحقّق من عنوان البريد الإلكتروني هو تحسين تدريجي لمسارك الحالي يزيل حاجة المستخدم إلى مغادرة موقعك الإلكتروني لاسترداد كلمة مرور لمرة واحدة أو النقر على رابط. يمكن للمواقع الإلكترونية إضافة حقول التحقّق من عنوان البريد الإلكتروني إلى جميع النماذج ذات الصلة، مثل عمليات تسجيل الدخول والاشتراكات في النشرة الإخبارية وإنشاء الحسابات واسترداد كلمات المرور. لا يتم تفعيل بروتوكول تأكيد عنوان البريد الإلكتروني إلا إذا كان المتصفّح يتيحه. إذا لم يتم تلقّي أي رمز عند الإرسال أو إذا فشلت أي من خطوات التحقّق من الصحة، يمكنك الرجوع إلى مسار تأكيد البريد الإلكتروني التلقائي. يعني ذلك أيضًا أنّه لا يتم رصد الميزات لواجهة برمجة التطبيقات، ويتعامل الموقع الإلكتروني لأداة التحقّق مع رمز EVT على أنّه اختياري، ويُعالجه إذا كان متوفرًا في الطلب.
يؤكّد التحقّق من عنوان البريد الإلكتروني أنّ لدى المستخدم جلسة نشطة مع مزوِّد عنوان بريده الإلكتروني. ولا يؤكّد عدم وصول بريدك الإلكتروني إلى المستخدم. قد تظل تريد إرسال رسائل الترحيب أو رسائل الإعداد الحالية وقد تحتاج إلى مطالبة المستخدم بالتحقّق من إعدادات الرسائل غير المرغوب فيها.
تنفيذ الموقع الإلكتروني لأداة التحقّق
لمزيد من التفاصيل، يمكنك الاطّلاع على رمز العرض التوضيحي الشامل والرجوع إلى خطوات التحقّق من الصحة في اقتراحَي Email Verification API وEmail Verification Protocol .
ضبط حقول النموذج
تأكَّد من أنّ حقول النموذج تحتوي على السمات الصحيحة:
<input
name="email-address"
type="email"
autocomplete="email">
<input
type="hidden"
name="token"
nonce="rAnD0m-VaLuE"
autocomplete="email-verification-token">
اضبط سمات type وautocomplete لإدخال email على email للسماح للمتصفّح بعرض ميزة "الإكمال التلقائي" لعنوان البريد الإلكتروني.
سيتم ملء الحقل hidden الجديد برمز التحقّق من عنوان البريد الإلكتروني عند إرسال النموذج. السمات الضرورية هي:
- اضبط
type="hidden"لأنّ هذا الحقل لا يتطلّب إدخال بيانات من المستخدم. - اضبط
nonce="rAnD0m-VaLuE". على الموقع الإلكتروني توفير رقم عشوائي فريد مرتبط بالجلسة للتحقّق من إرسال النموذج. - اضبط
autocomplete="email-verification-token". يستخدم المتصفّح هذه السمة لتحديد الحقل الذي سيتم ملؤه.
تحقَّق من صحة عناصر النموذج من خلال التحقّق من لوحة "الشبكة" في "أدوات مطوّري البرامج". عند اختيار عنوان بريد إلكتروني، سترى المتصفّح يفعّل طلبات بحث نظام أسماء النطاقات وعمليات البحث اللاحقة عن الحساب لمزوِّد البريد الإلكتروني وجهة الإصدار. هذه طلبات داخلية للمتصفّح، ولا يتلقّى موقعك الإلكتروني أي شيء إلى أن يتم إرسال النموذج.
التحقّق من صحة رمز EVT
هناك خمس خطوات للتحقّق من صحة كل مكوّن من حزمة EVT.
- تحليل الرمز المميّز
- التحقّق من صحة القيم المتوقّعة
- التحقّق من صحة ربط المفتاح
- التحقّق من صحة سجلّ نظام أسماء النطاقات
- اكتشاف جهة الإصدار والتحقّق من صحة توقيع رمز EVT
1. تحليل الرمز المميّز
تحتوي البيانات الأولية من إرسال النموذج على رمز EVT والمطالبات الموقَّعة في
JSON Web Token الخاص بالكشف الانتقائي
(SD-JWT+KB)، مع الفصل بينهما بعلامة المدة
(~ character). عليك فصل هذه البيانات وفك ترميز عناوين وحمولات Javascript
Object Signing and Encryption (JOSE) (على سبيل المثال، باستخدام
jose لـ Node.js).
إذا تحقّق example.com من demo@gmail.com، ستبدو الحمولة التي تم فك ترميزها مشابهة للمثال التالي:
{
"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. التحقّق من صحة القيم المتوقّعة
تأكَّد من أنّ القيم الأساسية في الحمولة تطابق القيم التي قدّمتها:
- تأكَّد من ضبط
email_verifiedعلىtrue. - تأكَّد من أنّ
emailيطابق عنوان البريد الإلكتروني المقدَّم في النموذج. - تأكَّد من أنّ
nonceيطابق الرقم العشوائي المقدَّم في النموذج. - تأكَّد من أنّ
audيطابق أصل موقعك الإلكتروني. - تأكَّد من أنّ
iatيحتوي على طابع زمني حديث نسبيًا، مثلاً بعد عرض النموذج.
3. التحقّق من صحة ربط المفتاح
ينشئ المتصفّح مفتاحًا مؤقتًا وزائلًا للمعاملة للتأكّد من أنّه وقّع الرمز المميّز. استخرِج هذا المفتاح من المطالبة cnf (التأكيد) في رمز EVT، ثم استخدِمه للتحقّق من صحة رمز JWT المميّز المرتبط بالمفتاح.
بعد ذلك، احسب قيمة التجزئة المتوقّعة وقارِنها بالمطالبة sd_hash. يوضّح مثال Node.js التالي كيفية إجراء هذا الحساب:
const calculatedHash = createHash("sha256")
.update(evtJwt + "~")
.digest("base64url");
4. التحقّق من صحة سجلّ نظام أسماء النطاقات
تحقَّق من سجلّ نظام أسماء النطاقات _email-verification لنطاق عنوان البريد الإلكتروني. على سبيل المثال، بالنسبة إلى demo@gmail.com، اطلُب سجلّ TXT لـ _email-verification.gmail.com. بالنسبة إلى هذا المزوِّد، يعرض طلب البحث موقع مزوِّد الحساب، أي accounts.google.com.
$ dig +short TXT _email-verification.gmail.com
"iss=accounts.google.com"
5. اكتشاف جهة الإصدار والتحقّق من صحة توقيع رمز EVT
تأكَّد من أنّ جهة الإصدار تعرض مورد /.well-known/email-verification، الذي يوفّر نقاط النهاية لإصدار الرمز المميّز ومفتاح الويب JSON (JWK) للموقع الإلكتروني وخوارزميات التوقيع المتوافقة.
$ 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"]
}
استخدِم JWKs للتحقّق من صحة رمز EVT JWT الذي استخرجته من الرمز المميّز. توفّر معظم مكتبات JOSE وظائف للتعامل مع عملية التحقّق هذه.
إذا نجحت جميع الخطوات الخمس، تكون قد تحقّقت من عنوان البريد الإلكتروني لدى المزوِّد. إذا لم تنجح، ارجع إلى إرسال رسالة تأكيد إلكترونية إلى المستخدم وفقًا لمسارك العادي.
تنفيذ خدمة مزوِّد البريد الإلكتروني وجهة الإصدار
لمزيد من التفاصيل، يمكنك الاطّلاع على رمز العرض التوضيحي لمزوِّد البريد الإلكتروني الوهمي والرجوع إلى خطوات جهة الإصدار في اقتراحَي Email Verification API وبروتوكول تأكيد عنوان البريد الإلكتروني.
بصفتك جهة إصدار، لست بحاجة إلى الاشتراك في مرحلة التجربة والتقييم أو تقديم رمز مميّز لأنّ سلوك المتصفّح يتم تفعيله من قِبل الموقع الإلكتروني للجهة المستندة إلى الهوية. عليك فقط التأكّد من توفّر نقاط النهاية المتوقّعة للردّ على هذه الطلبات.
ضبط ميزة "اكتشاف جهة الإصدار"
للسماح للمتصفّحات باكتشاف نقاط نهاية التحقّق تلقائيًا عند اختيار عنوان بريد إلكتروني يخص نطاقك، عليك عرض إعداداتك باستخدام نظام أسماء النطاقات ونقطة نهاية HTTP ضمن .well-known.
ضبط سجلّ مفوَّض لنظام أسماء النطاقات
اضبط سجلّ TXT لنظام أسماء النطاقات على نطاق بريدك الإلكتروني يفوّض سلطة التحقّق إلى معرّف جهة الإصدار. يمكن أن تستخدم هذه المعرّفات النطاق نفسه استنادًا إلى البنية الأساسية.
تنسيق السجلّ: _email-verification.<email-domain>
مثال على ملف المنطقة:
_email-verification.example.com IN TXT "iss=accounts.issuer.example"
استضافة نقطة نهاية .well-known/email-verification
استضِف ملف بيانات وصفية بتنسيق JSON على نطاق جهة الإصدار ضمن المسار /.well-known/.
يوضّح هذا الملف إمكانات الإصدار وخوارزميات التوقيع المشفرة التي تتيحها البنية الأساسية.
نقطة النهاية: https://<issuer-domain>/.well-known/email-verification
مثال على الرد:
{
"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"]
}
استضافة نقطة نهاية .well-known/web-identity
مورد JSON إضافي ضمن .well-known ربما سبق لك تنفيذه كجزء من Federated Credentials (FedCM)
API.
يوفّر هذا المورد روابط تؤدي إلى نقطة نهاية الحسابات وعنوان URL لتسجيل الدخول.
نقطة النهاية: https://<domain>/.well-known/web-identity
مثال على الرد:
{
"accounts_endpoint": "https://accounts.issuer.example/accounts",
"login_url": "https://accounts.issuer.example/login"
}
استخدام نقطة نهاية الحسابات
توفّر نقطة نهاية الحسابات من FedCM API قائمة بالحسابات التي تم تسجيل الدخول إليها في الوقت الحالي. يعرض المثال التالي ردًا بسيطًا. لمزيد من التفاصيل، يُرجى الرجوع إلى دليل تنفيذ موفِّر الهوية.
نقطة النهاية: كما هو محدّد في .well-known/web-identity
في ما يلي مثال على الرد:
{
"accounts": [
{
"id": "demo-example",
"name": "Demo User",
"email": "demo@example.com",
"given_name": "Demo"
}
]
}
التكامل مع Login Status API
على المستخدم أن تكون لديه جلسة نشطة مع المزوِّد وعليك الإشارة إلى ذلك للمتصفّح باستخدام Login Status API.
عندما يسجّل المستخدم الدخول أو يخرج بنجاح، اعرض عنوان استجابة HTTP المطابق:
Set-Login: logged-in
Set-Login: logged-out
بدلاً من ذلك، يمكنك تعديل الحالة باستخدام JavaScript في سياق تطبيق الويب:
navigator.login.setStatus("logged-in");
navigator.login.setStatus("logged-out");
التعامل مع طلبات الإصدار
تتلقّى issuance_endpoint طلب POST بتنسيق application/x-www-form-urlencoded يحتوي على request_token.
توضّح الأقسام التالية العملية الكاملة للتعامل مع طلبات الإصدار.
1. التحقّق من صحة طلب الإصدار
يمكنك تحليل حمولات المتصفّح الواردة والتحقّق من صحتها:
- الطريقة:
POST - التحقّق من الجلسة: تحقَّق من صحة ملفات تعريف ارتباط الطرف الأول
session/authenticationالخاصة بالمستخدم التي يتم إرسالها مع الطلب للتأكّد من وجود سياق هوية نشط ومفوَّض. - التحقّق من صحة المَعلمة: استخرِج المَعلمة
request_token(وهي رمز JWT مميّز موقَّع أنشأه المتصفّح). تأكَّد من أنّه يحتوي على المفتاح العام الزائل المتوقّع والبريد الإلكتروني المستهدَف والجمهور الصحيح والطابع الزمني الصالح.
من المفترض أن يبدو الرمز المميّز الذي تم فك ترميزه على النحو التالي:
{
"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. الردّ برمز مميّز
عند التحقّق من صحة الجلسة ورمز الطلب المميّز بنجاح، أنشئ رمز JWT مميّزًا موقَّعًا للكشف الانتقائي (SD-JWT) باستخدام الحمولة:
{
"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
}
وقِّع الحمولة باستخدام مفتاحك الخاص والخوارزمية المتوافقة. على سبيل المثال، باستخدام jose في 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}~`;
مثال على الردّ الناجح (HTTP 200):
{
"issuance_token": "tOkEn123tOkEn123tOkEn123...~"
}
اعتبارات مرحلة التجربة والتقييم
مراحل التجربة والتقييم هي تجارب لجمع الملاحظات، لذا فإنّ ملاحظاتك مهمة إذا كنت تشارك كجهة مستندة إلى الهوية أو موفِّر هوية. للإبلاغ عن المشاكل، استخدِم مستودعات GitHub التالية:
- Browser Email Verification API: WICG/email-verification
- بروتوكول تأكيد عنوان البريد الإلكتروني: dickhardt/email-verification
إذا واجهت أخطاء في تنفيذ Chrome، أبلِغ عن خطأ في المكوّن:
يتم التحكّم في تفعيل وظيفة مرحلة التجربة والتقييم على أساس كل استجابة على حدة من خلال تضمين رمز OT المميّز. يعني ذلك أنّه يمكنك التحكّم بدقة إذا كنت تفضّل حصر الوظيفة بجزء من المستخدمين. على سبيل المثال، إذا كان لديك إطار عمل للاختبار A/B، يمكنك دمج مرحلة التجربة والتقييم هناك لمجموعة تجربة خاضعة للرقابة. بدلاً من ذلك، إذا كان لديك مجموعة من المستخدمين لإجراء الاختبار التجريبي أو المعاينة المبكرة، قد تحتاج إلى تفعيل الميزة لهم. في هذه الحالة، تحقَّق من عنوان البريد الإلكتروني المقدَّم قبل إصدار الرمز المميّز أو التحقّق من صحته.
تفرض مراحل التجربة والتقييم أيضًا حدودًا على عدد الزيارات للحد من اعتماد المواقع الإلكترونية على الميزة قبل إطلاقها. تجري حاليًا عملية تطوير واجهة برمجة تطبيقات جهة الإصدار، وعليك توقُّع تغييرات غير متوافقة مع الإصدارات السابقة إلى جانب تعديلات على تجربة المستخدم في Chrome.
سننشر مزيدًا من التعديلات على المدونة هنا وفي القائمة البريدية evp-announce@chromium.org مع تقدّم عملية التطوير.