التجربة الأصلية: التوسّط الفوري في WebAuthn لتوفير تجربة تسجيل دخول سلسة

تاريخ النشر: 19 أغسطس 2025

الوساطة الفورية في WebAuthn هي إمكانية جديدة على الويب مصمّمة لتبسيط عمليات تسجيل الدخول للمستخدمين. تقدّم هذه التجربة الأصلية نظرة عامة على الميزة ومزاياها وتفاصيل تنفيذها، كما تدعوك إلى المشاركة والمساعدة في تحديد مستقبل مصادقة الويب.

الخلفية

غالبًا ما تؤدي المصادقة على الويب إلى حدوث مشاكل، ما يؤدي إلى تعقيد عملية تسجيل الدخول للمستخدم. على الرغم من فعالية عمليات WebAuthn الحالية، فإنّها تواجه صعوبة مع أزرار "تسجيل الدخول"، خاصةً عندما لا تكون بيانات الاعتماد متاحة على الفور، ما يؤدي إلى استخدام نماذج احتياطية عادية.

مثال على خطوات التوسّط الفوري

تقدّم هذه الميزة الجديدة عملية تسجيل دخول سلسة، على غرار واجهات برمجة التطبيقات preferImmediatelyAvailableCredentials على الأجهزة الجوّالة. فهي تبسّط عملية تسجيل الدخول، وغالبًا ما يتم ذلك قبل ظهور نماذج تسجيل الدخول العادية، ما يقلّل من المشاكل ويحسّن تجربة المستخدم.

آلية العمل

تتيح الوساطة الفورية في WebAuthn تجربة تسجيل دخول أكثر مباشرةً وفعاليةً. وتسمح هذه الواجهة للمتصفّح بأن يعرض على الفور بيانات الاعتماد المتاحة، أو أن يشير على الفور إلى عدم توفّرها بدون طلب المصادقة باستخدام مفتاح أمان أو جهاز آخر، ما يسهّل على المطوّرين تنفيذها.

نوع التوسّط immediate

نحن بصدد طرح نوع توسّط immediate لطلبات navigator.credentials.get(). عند ضبط هذا الخيار، يتم رفض الوعد مع NotAllowedError إذا لم يتم العثور على بيانات اعتماد متاحة محليًا. في حال توفّر بيانات الاعتماد، سيتعامل المتصفّح مع عملية المصادقة كالمعتاد.

تتيح هذه المرونة للمواقع الإلكترونية تعديل مسار تسجيل الدخول، وتوفير طرق بديلة بسلاسة عندما لا تتوفّر بيانات الاعتماد الفورية.

من المهم الإشارة إلى أنّه سيظل بإمكان المتصفّحات عرض الرمز NotAllowedError للحفاظ على خصوصية المستخدمين وأمانهم، ما يمنع حدوث مشاكل مثل التتبّع أو إنشاء بصمة رقمية.

رصد الميزات

يمكنك رصد ما إذا كانت الوساطة الفورية متاحة باستخدام PublicKeyCredential.getClientCapabilities(). يمكن للمطوّرين التحقّق من توفّر إذن الوصول إلى immediateGet في عنصر capabilities الذي تم عرضه.

async function checkImmediateMediationAvailability() {
  try {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.immediateGet && window.PasswordCredential) {
      console.log("Immediate Mediation with passwords supported.");
    } else if (capabilities.immediateGet) {
      console.log("Immediate Mediation without passwords supported.");
    } else { console.log("Immediate Mediation unsupported."); }
  } catch (error) {
    console.error("Error getting client capabilities:", error);
  }
}

ملاحظة: للمساعدة في توفير توافق أوسع مع المتصفحات، يتوفّر برنامج polyfill لـ getClientCapabilities() في مستودع WebAuthn Polyfills على GitHub.

مثال على عملية التنفيذ

لاستخدام واجهة برمجة التطبيقات، استدعِ navigator.credentials.get() مع mediation: 'immediate'. ننصحك بتضمين password: true في الطلب، لأنّ معظم المستخدمين على الأرجح لديهم كلمة مرور محفوظة اليوم ويمكنهم الاستفادة من هذه التجربة على الفور.

button.addEventListener('click', async (event) => {
  event.preventDefault();
  event.stopPropagation();
  const cred = await navigator.credentials.get({
    password: true,
    publicKey: {
      challenge, // Your server-generated challenge
      rpId: 'example.com' // Your Relying Party ID
    },
    mediation: 'immediate',
  });
});

على المطوّرين التعامل مع NotAllowedError في حظر catch لتوفير تجربة تسجيل دخول احتياطية سلسة.

مسار مفصّل للوساطة الفورية

تتيح ميزة "التوسّط الفوري" في WebAuthn حالتين أساسيتين للاستخدام بهدف تبسيط عملية تسجيل الدخول للمستخدمين، وهما: تفعيل زر مخصّص "تسجيل الدخول باستخدام مفتاح مرور" لإخفاء خيارات الرجوع غير المرغوب فيها، وتسهيل عملية تسجيل دخول ديناميكية تقدّم بيانات الاعتماد بشكل استباقي قبل اتخاذ إجراء مهم للمستخدم.

حالة الاستخدام 1: تسجيل الدخول بشكل صريح باستخدام زر تسجيل الدخول

يركّز هذا السيناريو على توفير زر مخصّص لتسجيل الدخول، ما يضمن تجربة مستخدم سلسة بدون طلبات غير متوقّعة أو الحاجة إلى الانتقال إلى صفحة تسجيل الدخول.

مسار يوضّح عرض Chrome لبيانات الاعتماد المحفوظة مسبقًا عندما ينقر المستخدم على زر تسجيل الدخول
  1. بدء عملية تسجيل الدخول من قِبل المستخدم: ينقر المستخدم على زر "تسجيل الدخول". بعد ذلك، يطلب الطرف المعتمِد على الهوية من navigator.credentials.get() استخدام mediation: "immediate".
  2. طلبات المتصفّح لاختيار بيانات الاعتماد (في حال توفّرها): يتحقّق المتصفّح من أي مفاتيح مرور أو كلمات مرور مطلوبة متوفّرة على الجهاز. وفي حال العثور على أي حساب، ستظهر على الفور واجهة مستخدم مشروطة تتيح للمستخدم اختيار حساب. يتم ترتيب الحسابات حسب الطابع الزمني لآخر استخدام، ثم أبجديًا. ملاحظة: إذا تم العثور على كلمات مرور ومفاتيح مرور من عدة خدمات لإدارة كلمات المرور للحساب نفسه، يعطي المتصفّح الأولوية لمفاتيح المرور. عندما تتوفّر مفاتيح مرور متعددة للحساب نفسه من مقدِّمي خدمات مختلفين، تكون الأولوية لمفتاح المرور الذي تم استخدامه آخر مرة.
  3. تسجيل الدخول بنجاح: يختار المستخدم مفتاح المرور من واجهة مستخدم المتصفّح. إذا كان المتصفّح يتطلّب إثبات الهوية، سيطلب من المستخدم إثباتها باستخدام الطريقة التي سبق له إعدادها (مثل رقم التعريف الشخصي أو المقاييس الحيوية أو النقش). اكتملت عملية تسجيل الدخول بنجاح.
  4. مسار احتياطي: عدم توفّر مفتاح مرور أو رفض المستخدم: إذا لم تتوفّر مفاتيح مرور محلية أو كلمات مرور مطلوبة للموقع الإلكتروني، أو إذا رفض المستخدم واجهة مستخدم المتصفّح، يعرض المتصفّح NotAllowedError لجهة الاعتماد، ولا يعرض أي واجهة مستخدم لخيارات مفتاح الأمان أو الأجهزة الأخرى. يمكن للجهة المعتمِدة بعد ذلك مواصلة عرض صفحة تسجيل الدخول العادية أو تقديم آليات مصادقة بديلة.

حالة الاستخدام 2: مسار تسجيل الدخول الضمني قبل اتّخاذ المستخدم إجراءً

يتيح هذا السيناريو تجربة تسجيل دخول استباقية، إذ يقدّم مفاتيح المرور وكلمات المرور قبل أن ينفّذ المستخدم إجراءً يتطلّب حالة مصادقة، مثل إتمام عملية الدفع.

عرض عملية اقتراح Chrome لبيانات الاعتماد المحفوظة مسبقًا عندما يتّخذ المستخدم إجراءً يتطلّب تسجيل الدخول.
  1. يبدأ المستخدم إجراءً يتطلّب تسجيل الدخول: ينقر المستخدم على زر لتنفيذ إجراء يتطلّب تسجيل الدخول (على سبيل المثال، زر "الدفع"). بعد ذلك، يطلب الطرف المعتمِد من navigator.credentials.get() الحصول على mediation: "immediate".
  2. طلبات المتصفّح لاختيار بيانات الاعتماد (في حال توفّرها): يتحقّق المتصفّح من أي مفاتيح مرور أو كلمات مرور متاحة محليًا. وفي حال العثور عليها، ستعرض على الفور واجهة مستخدم مشروطة ليختار المستخدم حسابًا. يتم ترتيب الحسابات حسب الطابع الزمني لآخر استخدام، ثم أبجديًا، ويتم إزالة التكرار لعرض إدخال واحد لكل حساب. ملاحظة: عندما يعثر المتصفّح على كلمات مرور ومفاتيح مرور من عدة خدمات لإدارة كلمات المرور للحساب نفسه، يعطي الأولوية لمفاتيح المرور. عندما تتوفّر مفاتيح مرور متعددة للحساب نفسه من مقدِّمي خدمات مختلفين، تكون الأولوية لمفتاح المرور الذي تم استخدامه آخر مرة.

  3. تسجيل الدخول بنجاح: يختار المستخدم بيانات اعتماد من واجهة مستخدم المتصفّح. إذا كان المتصفّح يتطلّب إثبات الهوية، سيطلب من المستخدم إثباتها باستخدام الطريقة التي سبق له إعدادها (مثل رقم التعريف الشخصي أو المقاييس الحيوية أو النقش). اكتملت عملية تسجيل الدخول بنجاح.

  4. مسار الحلّ البديل: عدم توفّر بيانات اعتماد أو رفض المستخدم: إذا لم تتوفّر بيانات اعتماد محلية للموقع الإلكتروني، أو إذا رفض المستخدم واجهة مستخدم المتصفّح، يعرض المتصفّح NotAllowedError لجهة الاعتماد، ولا يعرض المتصفّح أي واجهة مستخدم. لن تتغير تجربة تسجيل الدخول للمستخدمين عن الوضع الحالي. يمكن بعد ذلك أن تطلب الجهة المعتمِدة من المستخدم تقديم المزيد من التفاصيل (مثل عنوان البريد الإلكتروني) أو عرض آليات مصادقة بديلة، مثل نموذج كلمة المرور أو إثبات الهوية عبر الرسائل القصيرة أو طلب مشروط من WebAuthn يتوافق مع أدوات المصادقة على الأجهزة المختلفة.

المزايا

توفّر ميزة "التوسّط الفوري" في WebAuthn العديد من المزايا الرئيسية للمطوّرين والمستخدمين، وهي:

  • تسجيل الدخول السلس: يوفّر تجربة تسجيل دخول أكثر سلاسة وأقل تعقيدًا للمستخدمين الذين لديهم مفاتيح مرور أو كلمات مرور متاحة على الفور ومحفوظة في المتصفّح أو خدمة "مدير كلمات المرور".
  • تسجيل الدخول الذكي: تتيح واجهة برمجة التطبيقات عملية تسجيل دخول عندما يريد المستخدم تنفيذ أنشطة تتطلّب تسجيل الدخول. وتتكيّف هذه الإجراءات بذكاء مع حالة بيانات اعتماد المستخدم. ويوفّر مصادقة فورية عند الإمكان، ما يجنّب المستخدم عمليات إعادة التوجيه غير الضرورية ويبسّط عملية تسجيل الدخول.
  • تحسين إدارة بيانات الاعتماد: عندما تقدّم عدة خدمات لإدارة كلمات المرور بيانات اعتماد للحساب نفسه، يختار المتصفّح بذكاء الخيار الأنسب، ما يسهّل على المستخدمين إدارة بيانات الاعتماد.
  • الحدّ من ارتباك المستخدمين: من خلال عرض بيانات الاعتماد المعروفة مباشرةً، تقلّل هذه الميزة من ارتباك المستخدمين الذي يحدث غالبًا عند توفّر خيارات متعددة لتسجيل الدخول أو عند استخدام النماذج العادية.
  • الرجوع السلس: يضمن هذا الخيار الرجوع بسلاسة إلى صفحات تسجيل الدخول العادية للمستخدمين الذين ليس لديهم بيانات اعتماد فورية، ما يعني أنّ تجربتهم ستظل كما هي في المسارات الحالية.

الخصوصية والأمان

تتيح الوساطة الفورية في WebAuthn للمواقع الإلكترونية تحديد توفّر بيانات الاعتماد على الفور قبل أن يمنح المستخدم إذنًا صريحًا بمحاولة تسجيل الدخول. للحفاظ على خصوصية المستخدمين ومنع إساءة الاستخدام المحتملة، نتّخذ عدة إجراءات مهمة، وهي:

  • شرط إيماءة المستخدم: يتطلّب طلب البيانات من واجهة برمجة التطبيقات إيماءة مستخدم (أي تفعيل عابر من المستخدم). ويصعّب ذلك على المواقع الإلكترونية إجراء عمليات فحص صامتة وإنشاء بصمات رقمية.
  • جلسات التصفّح المتخفي والجلسات الخاصة: في جلسات التصفّح المتخفي أو الجلسات الخاصة، يؤدي أي طلب توسّط فوري إلى عرض الخطأ NotAllowedError.
  • القيود المفروضة على قوائم allowCredentials: تؤدي الطلبات التي تستخدم قوائم allowCredentials إلى عرض الخطأ NotAllowedError. يمنع ذلك المواقع الإلكترونية من استنتاج سجلّ تفاعلات المستخدم أو تتبُّع المستخدمين على مستوى الجلسات.
  • الإلغاء: لا يمكن ضبط المَعلمة signal في طلب يتضمّن وسيطة فورية. يمنع هذا الإجراء المواقع الإلكترونية من إغلاق أي واجهة مستخدم في المتصفّح آليًا.

جرّبه الآن

ننصحك بتجربة ميزة "التوسّط الفوري" في WebAuthn.

الحالة في Chrome

تتطوّر هذه الميزة خلال دورة تطوير Chromium:

  • أجهزة الكمبيوتر: نسخة تجريبية من Dev في الإصدار 136 من Chrome، مع نسخة تجريبية من المصدر من الإصدار 139 إلى 141 من Chrome.
  • Android: الإصدار التجريبي للمطوّرين في Chrome 140

للاختبار المحلي

لاختبار التوسّط الفوري في WebAuthn على الجهاز:

  1. تنزيل الإصدار 139 من Chrome: احصل على أحدث إصدار من Chrome وافتحه على الكمبيوتر.
  2. تفعيل علامة "الوساطة الفورية": انتقِل إلى chrome://flags/#web-authentication-immediate-get في شريط العناوين وفعِّل علامة "الوساطة الفورية لمصادقة الويب".
  3. إعداد بيانات الاعتماد: تأكَّد من حفظ مفاتيح المرور وكلمات المرور التي يمكن استخدامها:
    • كلمات المرور المحفوظة في "مدير كلمات المرور في Google"
    • مفاتيح المرور المحفوظة في "مدير كلمات المرور في Google" (يتطلّب ذلك تسجيل الدخول ومزامنة Chrome مع حساب Google) أو Windows Hello أو سلسلة مفاتيح iCloud

لإجراء اختبار علني (مرحلة التجربة والتقييم)

لاختبار التوسّط الفوري في WebAuthn باستخدام التجربة الأصلية في بيئة عامة، اتّبِع الخطوات التالية:

  1. الاشتراك: انتقِل إلى صفحة "التجارب الأصلية في Chrome" واشترِك في تجربة "التوسّط الفوري في WebAuthn".
  2. إضافة الرمز المميّز إلى عناوين HTTP: أدرِج الرمز المميّز الخاص بالتجربة الأصلية في عناوين HTTP الخاصة بموقعك الإلكتروني: HTML Origin-Trial: [YOUR_TRIAL_TOKEN]

ملاحظة: يمكنك أيضًا تقديم الرموز المميزة برمجيًا باستخدام JavaScript.

سيناريوهات الاختبار

نقدّم نموذجًا مرجعيًا وننصحك بإنشاء نموذج أولي خاص بك لاختبار سيناريوهات مختلفة.

  • العرض التوضيحي للتنفيذ المرجعي: يمكنك تجربة التنفيذ المرجعي على https://deephand.github.io/webauthn-immediate-demo/.
    • تنفيذ نموذج أولي: عند تنفيذ نموذج أولي على موقعك الإلكتروني، احرص على إجراء طلب navigator.credentials.get() مع mediation: 'immediate' بعد أن ينقر المستخدم على زر (مثل زر "تسجيل الدخول" أو أي تفاعل يتطلّب أن يكون المستخدم مسجّلاً الدخول).
  • المسار 1: تسجيل الدخول بدون كلمة مرور أو مفتاح مرور: إذا لم تكن لديك مفاتيح مرور أو كلمات مرور متاحة للموقع الإلكتروني، سيؤدي النقر على "تسجيل الدخول" إلى الانتقال مباشرةً إلى صفحة تسجيل الدخول العادية، بدون ظهور واجهة مستخدم المتصفّح.
  • المسار 2: تسجيل الدخول باستخدام مفتاح مرور متاح على الفور على الجهاز: إذا كان لديك مفتاح مرور محفوظ للموقع الإلكتروني، من المفترض أن يؤدي النقر على "تسجيل الدخول" إلى تشغيل واجهة المستخدم الخاصة بالوساطة الفورية، ما يتيح اختيار مفتاح المرور.
  • المسار 3: تسجيل الدخول باستخدام مفتاح مرور أو كلمة مرور محفوظة محليًا: إذا كان لديك مفاتيح مرور وكلمات مرور محفوظة، فعِّل الخيار "طلب كلمة المرور" (من خلال ضبط password: true في الرمز). بعد النقر على "تسجيل الدخول"، من المفترض أن تظهر لك خيارات استخدام كل من مفتاح المرور وكلمة المرور في واجهة مستخدم "الوساطة الفورية".