يناقش هذا المستند ما هو userVerification
في WebAuthn، وسلوكيات المتصفّح التي تنتج عند تحديد userVerification
أثناء إنشاء مفتاح المرور أو المصادقة.
ما هو "التحقق من المستخدم" في WebAuthn؟
تعتمد مفاتيح المرور على تشفير المفتاح العام. من خلال إنشاء مفتاح مرور، يتم إنشاء زوج من المفاتيح العام والخاص، وتخزين المفتاح الخاص من قِبل موفِّر مفتاح المرور، ثم يُرجع المفتاح العام إلى خادم الجهة المعتمدة (RP) لتخزينه. يمكن للخادم مصادقة المستخدم من خلال إثبات صحة توقيع تم توقيعه باستخدام مفتاح المرور نفسه باستخدام المفتاح العام المقترن. تثبت علامة "مشاركة المستخدِم" (UP) على بيانات اعتماد المفتاح العام أنّ شخصًا ما تفاعل مع الجهاز أثناء المصادقة.
التحقق من المستخدم هو طبقة اختيارية من الأمان تهدف إلى التأكد من وجود الشخص الصحيح أثناء المصادقة، وليس فقط شخص واحد، كما يؤكد وجود المستخدم. ويتم ذلك عادةً على الهواتف الذكية باستخدام آلية قفل الشاشة، سواء كانت مقاييس حيوية أو رقم تعريف شخصي أو كلمة مرور. ما إذا تم تنفيذ عملية التحقّق من المستخدم أم لا في علامة "UV" التي يتم عرضها في بيانات برنامج المصادقة أثناء تسجيل مفتاح المرور والمصادقة
كيفية التحقق من صحة UP والأشعة فوق البنفسجية على الخادم
يتمّ إرسال العلامات المنطقية لوجود المستخدم (UP) والمستخدم الذي تمّ التحقّق منه (UV) إلى الخادم في حقل بيانات برنامج المصادقة. أثناء المصادقة، يمكن التحقق من صحة محتوى حقل بيانات برنامج المصادقة من خلال التحقق من التوقيع باستخدام المفتاح العام المخزن. طالما أن التوقيع صالح، يمكن للخادم اعتبار هذه العلامات حقيقية.
عند تسجيل مفتاح المرور والمصادقة عليه، يجب أن يفحص الخادم أن علامة UP هي true
، وما إذا كانت علامة الأشعة فوق البنفسجية true
أو false
، بناءً على المتطلبات.
تحديد المَعلمة userVerification
وفقًا لمواصفات WebAuthn، يمكن لـ RP طلب إثبات هوية المستخدم باستخدام المَعلمة userVerification
في كل من إنشاء بيانات الاعتماد وتأكيدها. ويمكن استخدام السمة 'preferred'
أو 'required'
أو 'discouraged'
، ما يعني ما يلي:
'preferred'
(طريقة تلقائية): يُفضَّل استخدام طريقة التحقُّق من المستخدم على الجهاز، ولكن يمكن تخطّي هذه الطريقة في حال عدم توفّرها. تحتوي بيانات اعتماد الاستجابة على قيمة علامة الأشعة فوق البنفسجيةtrue
في حال إتمام التحقّق من المستخدم، وقيمةfalse
في حال عدم تنفيذ الإجراء على الأشعة فوق البنفسجية.'required'
: يجب استدعاء إحدى طرق التحقّق من المستخدم المتاحة على الجهاز. وإذا لم يكن أحدها متاحًا، سيتعذّر تنفيذ الطلب على الجهاز. ويعني هذا أنّه يتم دائمًا إرجاع بيانات اعتماد الاستجابة مع ضبط علامة الأشعة فوق البنفسجية علىtrue
.'discouraged'
: لا يُنصح باستخدام طريقة للتحقّق من هوية المستخدم. ومع ذلك، يمكن تنفيذ التحقُّق من المستخدم على أي حال، حسب الجهاز، وقد تحتوي علامة الأشعة فوق البنفسجية علىtrue
أوfalse
.
رمز نموذجي لإنشاء مفتاح المرور:
const publicKeyCredentialCreationOptions = {
// ...
authenticatorSelection: {
authenticatorAttachment: 'platform',
residentKey: 'required',
requireResidentKey: true,
userVerification: 'preferred'
}
};
const credential = await navigator.credentials.create({
publicKey: publicKeyCredentialCreationOptions
});
رمز نموذجي لمصادقة مفتاح المرور:
const publicKeyCredentialRequestOptions = {
challenge: /* Omitted challenge data... */,
rpId: 'example.com',
userVerification: 'preferred'
};
const credential = await navigator.credentials.get({
publicKey: publicKeyCredentialRequestOptions
});
أي خيار يجب أن تختاره لحساب "userVerification
"؟
وتعتمد قيمة userVerification
التي عليك استخدامها على متطلبات التطبيق بالإضافة إلى متطلبات تجربة المستخدم.
حالات استخدام userVerification='preferred'
يمكنك استخدام userVerification='preferred'
إذا كنت تعطي الأولوية لتجربة المستخدم على الحماية.
هناك بيئات تكون فيها عملية التحقّق من المستخدم أكثر صعوبة من الحماية. على سبيل المثال، يُطلب من المستخدم إدخال كلمة مرور النظام بدلاً من ذلك على نظام التشغيل macOS الذي لا يتوفّر فيه رقم التعريف باللمس (لأنّ الجهاز غير متوافق مع هذه الميزة أو لأنّه غير مفعّل أو لأنّ الجهاز في وضع صدفي). ويسبّب ذلك معوقات، وقد يتوقّف المستخدم عن المصادقة تمامًا. إذا كان التخلص من الصعوبات أكثر أهمية بالنسبة إليك، استخدِم userVerification='preferred'
.
في حال استخدام userVerification='preferred'
، تصبح علامة الأشعة فوق البنفسجية true
إذا تمّ إثبات هوية المستخدم بنجاح، وfalse
في حال تخطّي عملية التحقّق من المستخدم. على سبيل المثال، على نظام التشغيل macOS الذي لا تتوفّر فيه ميزة Touch ID، تطلب من المستخدم النقر على زر لتخطّي عملية التحقق من المستخدم، وتتضمّن بيانات اعتماد المفتاح العام علامة UV false
.
يمكن أن تكون علامة الأشعة فوق البنفسجية إشارة في تحليل المخاطر الخاص بك. في حال كانت محاولة تسجيل الدخول تبدو خطيرة بسبب عوامل أخرى، قد تحتاج إلى تقديم اختبارات إضافية للتحقّق من تسجيل الدخول للمستخدم في حال عدم إجراء عملية التحقق من المستخدم.
حالات استخدام userVerification='required'
استخدِم userVerification='required'
إذا كنت تعتقد أنّ كلاً من UP والأشعة فوق البنفسجية ضروريان للغاية.
والجانب السلبي لهذا الخيار هو أنّ المستخدم قد يواجه المزيد من الصعوبات عند تسجيل الدخول. على سبيل المثال، على نظام التشغيل macOS الذي لا يتوفّر فيه رقم التعريف باللمس، يُطلب من المستخدم إدخال كلمة مرور النظام.
وباستخدام userVerification='required'
، يمكنك التأكّد من أنّ عملية التحقّق من المستخدِم قد تتم على الجهاز. تأكَّد من أنّ الخادم يتحقّق من أنّ علامة الأشعة فوق البنفسجية هي true
.
الخلاصة
ومن خلال الاستفادة من ميزة إثبات ملكية المستخدم، يمكن للجهات التي تعتمد على مفاتيح المرور قياس احتمالية تسجيل مالك الجهاز الدخول. ويختار ما إذا كان سيتم طلب التحقق من المستخدم أو جعله اختياريًا بناءً على مدى أهمية آلية تسجيل الدخول الاحتياطية في مسار المستخدم. تأكَّد من أنّ الخادم يتحقق من العلامة UP وعلامة أشعة UV لمصادقة مستخدم مفتاح المرور.