يقدّم هذا الدليل توجيهًا مكثّفًا وعمليًا لتنفيذ مصادقة آمنة باستخدام مفاتيح المرور وإدارة بيانات الاعتماد بشكل مستقل عن إطار العمل في تطبيقات الويب الحديثة.
1. المتطلبات الأساسية لمفاتيح المرور
تعتمد مفاتيح المرور على واجهة برمجة التطبيقات Web Authentication API (WebAuthn)، والتي تفرض قيودًا أمنية صارمة وشاملة يجب استيفاؤها قبل أي محاولة تنفيذ:
- السياقات الآمنة: يتم حظر طرق WebAuthn (
navigator.credentials.createوnavigator.credentials.get) بشكل صارم خلف السياقات الآمنة. يجب تشغيل التطبيقات علىhttps://في مرحلة الإنتاج، أوhttp://localhostللتطوير المحلي. - معرّف الجهة المعتمدة (RP): يرتبط كل مستند تعريف بمعرّف جهة معتمدة (وهو في الأساس اسم نطاق التطبيق). يجب أن يتطابق معرّف الجهة المعتمدة الذي تم تمريره في الخيارات من جهة الخادم مع اسم نطاق المصدر الحالي أو أن يكون لاحقة صالحة له (على سبيل المثال،
example.comصالح لـlogin.example.com). تؤدي حالات عدم التطابق إلى استثناءاتSecurityErrorمن جهة العميل.
2. تحذير بشأن تجربة المستخدم في ما يتعلّق بمعرّف AAGUID
المعرّف الفريد العالمي لشهادة المصادقة (AAGUID) هو معرّف مكوّن من 128 بت يتم عرضه في بيانات شهادة التسجيل ويمثّل طراز/مقدّم خدمة المصادقة (مثل "مدير كلمات المرور في Google" و"سلسلة مفاتيح iCloud" و1Password).
- تلميحات تجربة المستخدم فقط: يجب أن تستخدم الأطراف المعتمِدة معرّف AAGUID حصريًا لتلميحات تجربة المستخدم (مثل عرض اسم موفّر مفتاح المرور ورمزه في قائمة إدارة لمساعدة المستخدم).
- عدم الاعتماد على الأمان: يجب ألا تستخدم التطبيقات معرّف AAGUID لاتخاذ قرارات بشأن الأمان المشفّر أو الوصول. لا توفّر مفاتيح المرور الخاصة بالمنصة حاليًا شهادة تصديق مشفّرة لمعرّفات AAGUID، ما يعني أنّه يمكن تعديلها أو محاكاتها من خلال وكلاء المستخدمين.
3- اقتراحات المكتبة المنفصلة
لإنشاء خيارات FIDO2/WebAuthn في الخلفية والتحقّق من التوقيع، على المطوّرين الاعتماد على مكتبات برنامج مفتوح المصدر تم فحصها لكل لغة بدلاً من استخدام التشفير اليدوي:
- JavaScript/TypeScript: SimpleWebAuthn (github.com/MasterKale/SimpleWebAuthn)
- Python: py_webauthn (github.com/duo-labs/py_webauthn)
- Java: خادم Java WebAuthn (github.com/Yubico/java-webauthn-server)، وWebAuthn4J (github.com/webauthn4j/webauthn4j)
- .NET: مكتبة .NET لبروتوكول FIDO2 (github.com/abergs/fido2-net-lib)
- Go: مكتبة WebAuthn Go (github.com/go-webauthn/webauthn)
- Ruby: WebAuthn Ruby (github.com/cedarcode/webauthn-ruby)
- PHP: إطار عمل WebAuthn (github.com/web-auth/webauthn-framework)
4. مصفوفة مراجع حالات الاستخدام
حدِّد حالة الاستخدام المطابقة أدناه واطّلِع على دليل الاستخدام الكامل الخاص بها. تتضمّن كل حالة استخدام واجهات برمجة تطبيقات مهمة (PublicKeyCredential.parseCreationOptionsFromJSON وparseRequestOptionsFromJSON وsignalAllAcceptedCredentials وsignalCurrentUserDetails وsignalUnknownCredential والتوسّط المشروط ومعالجة AAGUID وما إلى ذلك) يتم توثيقها فقط في الدليل الخاص بكل حالة استخدام. لا تتخطَّ خطوة الاسترداد هذه، ولا تستبدِل برامج تضمين المكتبات التابعة لجهات خارجية (مثل startAuthentication/startRegistration في SimpleWebAuthn) على العميل، بل استدعِ واجهات برمجة التطبيقات الأصلية لمتصفّح WebAuthn مباشرةً. تنطبق اقتراحات المكتبة في القسم 3 على جهة الخادم (التحقّق من FIDO2 في الخلفية) فقط.
تم ربط تفاصيل تنفيذ مفتاح المرور وWebAuthn المحدّدة بالأدلة التالية:
- تسجيل مفتاح المرور: تسجيل مفتاح المرور — يتيح تسجيل مفاتيح مرور جديدة وعروض ترويجية.
- إنشاء مفتاح مرور مشروط: إنشاء مفتاح مرور مشروط (الترويج بعد تسجيل الدخول): يتم تسجيل مفاتيح المرور تلقائيًا فور تسجيل الدخول بنجاح باستخدام كلمة المرور.
- المصادقة باستخدام مفتاح المرور: المصادقة باستخدام مفتاح المرور — عمليات تسجيل الدخول باستخدام الملء التلقائي القابل للاكتشاف والزر.
- عمليات تسجيل الدخول السريعة: عمليات تسجيل الدخول السريعة باستخدام وضع واجهة المستخدم الفوري: عمليات تسجيل الدخول السياقية في المكان نفسه باستخدام مفاتيح المرور المحلية وكلمات المرور المحفوظة قبل التنقّل في الصفحة.
- إدارة مفاتيح المرور: إدارة مفاتيح المرور — مزامنة القوائم وعمليات إعادة التسمية والحذف مع خدمات إدارة كلمات المرور
- إعادة المصادقة باستخدام مفتاح المرور: إعادة المصادقة باستخدام مفتاح المرور — إعادة التحقّق من المستخدمين المكرِّرين الزيارة الذين سجّلوا الدخول لتنفيذ خطوات حسّاسة.