سجل الفريق بلاغاً: «التسجيل نجح، لكن التحقق التالي رفض credential». نعيد بناء ceremony خطوة بخطوة: خيارات من الخادم، تحدٍ، عملية authenticator، ثم attestation response والتحقق. في مشاريع تخرج الأمن السيبراني يصلح هذا كتمرين threat modeling؛ نحدد ما الذي يثبته كل تحقق وما الذي لا يثبته، ونعمل بحسابات ومفاتيح محلية مؤقتة فقط. استند إلى مواصفة W3C WebAuthn Level 3 ودليل MDN Web Authentication API عند إعداد التسلسل.
ارسم آلة حالات واضحة
قسّم التطبيق إلى startRegistration وbrowserRequest وserverVerify. يحتفظ الخادم بجلسة قصيرة فيها challenge ووقت انتهاء وRP ID والمستخدم التجريبي، ثم يرسل الخيارات للمتصفح. بعد عودة الاستجابة، يتحقق المختبر أن challenge يطابق القيمة التي أنشأها، وأن origin مسموح، وأن RP ID hash والبيانات المتوقعة متوافقة بحسب المكتبة المستخدمة. لا تنفذ تشفير التوقيع يدوياً لعرضه على الشاشة؛ استعمل مكتبة معروفة في نسخة المختبر، واعرض فقط أسماء الحقول ونتائج الفحص، مع تمويه أي معرّفات أو مواد يمكن أن تلتبس على الطالب كبيانات سرية.
اعرض ceremony كشريط أحداث: الخادم ينشئ challenge فريداً ومؤقتاً ويربطه بالجلسة؛ المتصفح يطلب من authenticator إنشاء credential؛ ثم يرسل response؛ وأخيراً يتحقق الخادم من challenge وorigin وRP ID والحقول المطلوبة قبل حفظ المفتاح العام. احتفظ بمعرف عملية عشوائي، ولا تسجل challenge بعد انتهاء صلاحيته كأنه secret صالح.
أنشئ أمثلة قبول ورفض متقابلة
اكتب fixture صحيحاً من بيئة اختبار المتصفح ثم انسخه إلى مجموعة حالات قابلة لإعادة الإنتاج. غيّر challenge وحده في حالة، وorigin في أخرى، وRP ID في ثالثة، ووقت الصلاحية في رابعة. في كل حالة تعرض الواجهة الحقل المتأثر والقاعدة المرجعية ورسالة رفض مفهومة. لا تقبل استجابة فارغة على أنها «لا يوجد خطأ»، ولا تجعل رمز HTTP 200 علامة نجاح إذا أظهر محرك التحقق فشلاً. خزّن النتيجة لكل مرحلة حتى يميز الطالب بين إنشاء credential وبين ربطه بحساب تجريبي.
قسم التهديدات إلى إعادة response قديم، origin غير متوقع، خلط RP ID، وانقطاع منتصف العملية. اربط كل تهديد بالتحقق الذي يخفف منه وبالدليل الذي يسجله المختبر. لا تدّع أن attestation يثبت هوية شخص، ولا تجعل نجاح fixture دليلاً على مقاومة كل جهاز أو إعداد متصفح.
سيناريو قصير للتجربة
لنفترض أن المتصفح أعاد استجابة تسجيل مرتبطة بتحدٍ محفوظ في جلسة المستخدم، ثم حاول الفريق إعادة تشغيل الاستجابة بعد انتهاء المهلة. يجب أن يرفضها المختبر لأن التحدي لم يعد صالحاً أو سبق استخدامه، لا أن يسجل credential ثانية. هذا سيناريو تعليمي مقترح، وليس نتيجة اختبار أجري على جهاز حقيقي في هذا المقال. اعرض حالة أولى ناجحة وحالة ثانية منسوخة، وسجل وقت الإصدار والاستهلاك ومعرف fixture. لا تخلط replay challenge مع آلية OAuth؛ فالموضوع هنا هو credential public-key وتحقق relying party.
ميّز بين المتصفح والخادم والمصادق
في نموذج WebAuthn يوجد relying party، عادة موقع الويب وخادمه، ومصادق يتحكم به المستخدم، ووسيط هو المتصفح أو نظام التشغيل. توضح مواصفة W3C WebAuthn Level 3 صيغة إنشاء credential واستخدامه، بما في ذلك challenge وRP ID وبيانات الاعتماد العامة. تشرح وثائق MDN للواجهة وظائف التسجيل والمصادقة من منظور المتصفح، بينما يقدم دليل Yubico للمطورين تصوراً عاماً لمكونات FIDO2. اقرأ التوثيق المعياري قبل تحويل رسوم واجهة سهلة إلى ادعاء تطابق كامل.
اختبر حدود المحاكي وخط الأساس
خط الأساس العملي هو مثال رسمي أو مكتبة WebAuthn موثقة تعمل محلياً، مع مقارنة التحقق في الوضع الصحيح مقابل متغير واحد غير صالح. اختبر انقطاع صفحة التسجيل، challenge مفقوداً، استجابة قديمة، origin غير متوقع، مستخدماً بلا credential، وإلغاء المستخدم للطلب. معيار القبول أن كل تعديل مقصود ينتج رفضاً محدداً، وأن البيانات الوصفية لا تسجل challenge قابلاً لإعادة الاستخدام في سجل مكشوف. أضف حالة لا يدعم فيها المتصفح WebAuthn وقدم مساراً واضحاً للعودة. لا تستنتج أماناً مطلقاً من نجاح أربع حالات صناعية.
ما الذي لا يثبته المشروع؟
المختبر لا يعادل تدقيقاً أمنياً، ولا يغطي جميع أنواع المصادقات أو attestation أو إدارة حسابات الاسترداد أو سلوك كل جهاز. مواصفة W3C توضح أن معلومات user verification لا تعطي الموقع هوية طبيعية مؤكدة للشخص بذاتها، كما أن دعم الخصائص يختلف بين المنصات. لا تجمع بصمات أو PIN أو صوراً حيوية في المشروع. سلم مخطط تدفق، سجلات حالات مزيفة، اختبارات تحقق، وصفاً للـthreat model، وقائمة لما لم يتم تنفيذه. يمكن مناقشة النطاق الأكاديمي ضمن مشاريع التخرج وخدمة المشاريع البرمجية، مع عرض واضح أن أي نشر خارجي يحتاج مراجعة أمنية مستقلة.
احفظ جدولاً يربط كل حالة اختبار بمتطلب أو فقرة مرجعية، وتأكد أن رسائل الخطأ لا تعرض محتوى الاستجابة المشفر أو challenge كاملًا في سجل يمكن مشاركته. الإخفاء لا يغير التحقق، لكنه يقلل تداول قيم حساسة أثناء شرح المختبر.
المصادر
- Web Authentication: An API for accessing Public Key Credentials Level 3
- WebAuthn guide for relying parties
- FIDO2 WebAuthn developer guide
مراجعة المصادر: .
اختبار المثال وحدوده
الاستجابة الافتراضية مشهد اختباري يوضح مطابقة الحقول، وليست مصادقة فعلية أو إثباتاً أمنياً.
مقالات ذات صلة
الخدمة المرتبطة: تطوير المشاريع البرمجية الجامعية.
أرسل متطلبات مشروعك