مفاتيح المرور

ميزات الويب: مصادقة الويب

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

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 المحدّدة بالأدلة التالية: