تاريخ النشر: 9 مايو 2025
توفّر مفاتيح المرور مصادقة قوية ومقاومة للتصيّد الاحتيالي. ومع ذلك، قد يؤدي تشجيع المستخدمين على استخدامها إلى حدوث بعض المشاكل. باستخدام ميزة إنشاء مفاتيح المرور تلقائيًا، يمكنك إنشاء مفاتيح مرور للمستخدمين في الوقت المناسب، شرط أن يكون لديهم كلمة مرور محفوظة لموقعك الإلكتروني. تُعدّ ميزة "الإنشاء الشرطي"، التي تتيح إنشاء مفاتيح مرور تلقائيًا، جزءًا من مواصفات WebAuthn.
آلية العمل
لمساعدة المستخدمين على استخدام مفاتيح المرور بسهولة أكبر، استخدِم ميزة Conditional Create في WebAuthn API. تتيح ميزة "إنشاء مشروط" لموقعك الإلكتروني طلب مفتاح مرور من المستخدم بدون أن يضطر إلى اتّخاذ أي إجراء.
يعمل هذا المسار عند استيفاء الشروط التالية:
- لدى المستخدم كلمة مرور محفوظة في خدمة إدارة كلمات المرور التلقائية.
- تم استخدام كلمة المرور مؤخرًا. من المفترض أن يتم استدعاء Conditional Create مباشرةً بعد تسجيل الدخول بنجاح باستخدام كلمة المرور.
في حال استيفاء الشرطَين، يمكنك أن تطلب من خدمة إدارة كلمات المرور إنشاء مفتاح مرور للمستخدم من خلال استدعاء Conditional Create. بعد إنشاء مفتاح المرور بنجاح، يتم إرسال إشعار إلى المستخدم حسب خدمة إدارة كلمات المرور.
التوافق
تتوافق ميزة Conditional Create مع متصفّح Safari على أجهزة macOS وجميع المتصفّحات على أجهزة iOS، بالإضافة إلى متصفّح Chrome على أجهزة الكمبيوتر ومتصفّح Chrome على أجهزة Android.
تنفيذ عملية إنشاء شرطية
تستند ميزة إنشاء مفاتيح المرور تلقائيًا إلى ميزة في WebAuthn API تُعرف باسم الإنشاء الشرطي. هذه طلبات WebAuthn عادية create()
مع ضبط المَعلمة mediation
على "conditional"
، وهي تعمل بشكل مشابه لميزة الملء التلقائي باستخدام مفتاح المرور لطلبات get()
.
استخدِم Conditional Create بعد أن يسجّل المستخدم الدخول باستخدام كلمة مرور. يعتمد نجاح عملية الإنشاء على خدمة "مدير كلمات المرور" واستيفاء شروط معيّنة. ويمكن أن تختلف هذه الشروط حسب خدمة إدارة كلمات المرور، وقد تتغيّر بمرور الوقت. على سبيل المثال، في Chrome باستخدام "مدير كلمات المرور في Google"، يجب أن يكون المستخدم قد سجّل الدخول مؤخرًا باستخدام كلمة مرور محفوظة للموقع الإلكتروني.
إذا نجح المتصفّح في إنشاء مفتاح المرور، سيعرض بيانات اعتماد تتضمّن مفتاحًا عامًا. أرسِل بيانات الاعتماد هذه إلى الخلفية لإكمال عملية التسجيل وتفعيل المصادقة المستقبلية.
رصد الميزات
يمكنك تحديد ما إذا كانت ميزة "إنشاء مشروط" متاحة على المتصفّح من خلال استدعاء PublicKeyCredential.getClientCapabilities()
. معرفة ما إذا كان عنصر تم عرضه
يتضمّن true
للسمة conditionalCreate
if (window.PublicKeyCredential && PublicKeyCredential.getClientCapabilities) {
const capabilities = await PublicKeyCredential.getClientCapabilities();
if (capabilities.conditionalCreate) {
// Conditional create is available
}
}
إذا كانت getClientCapabilities
غير متاحة، لن تكون ميزة "إنشاء مشروط" متاحة أيضًا.
إنشاء مفتاح مرور بشكل مشروط
لتنفيذ عملية إنشاء مفتاح مرور تلقائيًا، استخدِم
navigator.credentials.create()
ولكن مع mediation: "conditional"
على النحو التالي.
const cred = await navigator.credentials.create({
publicKey: options,
// Request conditional creation
mediation: 'conditional'
});
يجب استخدام ميزة إنشاء مفتاح المرور تلقائيًا فور تسجيل المستخدم الدخول لزيادة فرص استيفاء معايير خدمة "مدير كلمات المرور" المتعلقة بالإنشاء التلقائي.
يمكنك إرسال بيانات اعتماد المفتاح العام الناتجة إلى الخادم من أجل إثبات ملكية مفتاح المرور وتسجيله. تأكَّد من تسجيل دخول المستخدم على الخادم.
المحاذير
إنّ ميزة "إنشاء مشروط" ليست صعبة التنفيذ في حد ذاتها، ولكن هناك العديد من التحذيرات عند دمج هذه الميزة فعليًا في نظام حالي.
تجاهل حالة توفّر المستخدم والتحقّق من هويته على الخادم
تعرض استجابة التسجيل كلاً من "حضور المستخدم" و "تم التحقّق من المستخدم" على النحو التالي: false
، لذا على الخادم تجاهل هذين العلامتَين أثناء التحقّق من بيانات الاعتماد.
إلغاء مكالمة WebAuthn الجارية قبل إنشاء مفتاح مرور تلقائيًا
عندما يتوقّع RP أن يسجّل المستخدم الدخول باستخدام مفتاح مرور أو كلمة مرور، يكون إجراء عملية استرجاع شرطي هو الخيار الأفضل. قد يؤدي ذلك إلى إلغاء طلب الحصول الشرطي قبل تنفيذ عملية إنشاء شرطية.
لإجراء ذلك، عليك استخدام AbortController
والاتصال بالرقم .abort()
.
// To abort a WebAuthn call, instantiate an AbortController.
const controller = new AbortController();
const cred = await navigator.credentials.get({
publicKey: options,
signal: controller.signal,
// Request conditional get
mediation: 'conditional'
});
// Abort the call
controller.abort();
تجاهُل الاستثناءات بشكل سليم
عند إنشاء مفتاح مرور مشروط، هناك بعض الحالات التي يجب فيها تجاهل الاستثناءات:
InvalidStateError
: يتوفّر مفتاح مرور حاليًا لدى مقدّم خدمة مفاتيح المرور (لا تنسَ تحديدexcludeCredentials
).NotAllowedError
: لا يستوفي إنشاء مفتاح مرور الشرط.-
AbortError
: تم إلغاء طلب WebAuthn.
قد يؤدي عرض الأخطاء في هذه الحالات إلى إرباك المستخدم لأنّ المتصفّح يعالجها بدون إظهار أي رسائل: فهو يعرض إشعارًا عند النجاح فقط، ولا تؤدي حالات الفشل إلى ظهور رسائل مرئية.
إشارة عند تعذُّر تسجيل مفتاح مرور
عند إنشاء مفتاح مرور ولكن تعذّر تسجيله على الخادم، سيواجه المستخدم مشكلة في محاولة تسجيل الدخول. يمكن أن يحدث ذلك عندما تكون قائمة مفاتيح المرور غير متسقة بين مقدّم مفاتيح المرور والخادم.
لتجنُّب مثل هذه الحالات، استخدِم Signal API للحفاظ على اتّساقها.
لا تتوفّر إمكانية الترقية من عمليات تسجيل الدخول بدون كلمة مرور
في هذه المرحلة، لا يمكن إنشاء مفتاح مرور بشكل مشروط إلا بعد أن يدخل المستخدم كلمة مرور صالحة. وهذا يعني أنّ طرق تسجيل الدخول بدون كلمة مرور، مثل الروابط السحرية أو إثبات ملكية رقم الهاتف أو اتحاد الهوية، لن تستوفي هذا الشرط.
ملخّص
يمكن أن يؤدي إنشاء مفاتيح مرور تلقائيًا إلى تسريع اعتمادها على موقعك الإلكتروني، ما يساعد المستخدمين على الانتقال من كلمات المرور إلى طريقة مصادقة أكثر أمانًا.
لمزيد من المعلومات حول مفاتيح المرور، ابدأ من مقالة تسجيل الدخول بدون كلمة مرور باستخدام مفاتيح المرور.