يتناول هذا المستند مفهوم userVerification
في WebAuthn، وسلوكيات المتصفّح الناتجة عند تحديد userVerification
أثناء إنشاء مفتاح مرور أو المصادقة.
ما المقصود بـ "التحقّق من هوية المستخدم" في WebAuthn؟
تستند مفاتيح المرور إلى التشفير بالمفتاح العام. عند إنشاء مفتاح مرور، يتم إنشاء زوج من المفاتيح العامة والخاصة، ويخزّن موفّر مفتاح المرور المفتاح الخاص، ويتم إرجاع المفتاح العام إلى خادم الجهة المعتمِدة لتخزينه. يمكن للخادم مصادقة المستخدم من خلال التحقّق من توقيع تم توقيعه باستخدام مفتاح المرور نفسه باستخدام المفتاح العام المقترن. تثبت العلامة "المستخدم حاضر" (UP) في بيانات اعتماد المفتاح العام أنّ شخصًا تفاعل مع الجهاز أثناء المصادقة.
التحقّق من هوية المستخدم هو طبقة أمان اختيارية تهدف إلى التأكّد من أنّ الشخص الصحيح كان حاضرًا أثناء المصادقة، وليس أي شخص، كما يؤكّد حضور المستخدم. على الهواتف الذكية، يتم ذلك عادةً باستخدام آلية قفل الشاشة، سواء كانت مقاييس حيوية أو رقم تعريف شخصي أو كلمة مرور. يتم إعداد تقرير عن ما إذا تم إجراء عملية إثبات هوية المستخدم في العلامة "UV" التي يتم عرضها في بيانات أداة المصادقة أثناء تسجيل مفتاح المرور والمصادقة.


كيف يتم التحقّق من صحة UP وUV على الخادم؟
يتم إرسال علامتَي القيمة المنطقية "حضور المستخدم" (UP) و"تحقّق المستخدم" (UV) إلى الخادم في حقل بيانات المصادقة. أثناء المصادقة، يمكن التحقّق من صحة محتوى حقل بيانات المصادقة من خلال التحقّق من التوقيع باستخدام المفتاح العام المخزَّن. وطالما أنّ التوقيع صالح، يمكن للخادم اعتبار العلامات أصلية.

عند تسجيل مفتاح المرور والمصادقة، يجب أن يتحقّق الخادم مما إذا كانت العلامة UP هي true
أو false
، وما إذا كانت العلامة UV هي true
أو false
، وذلك حسب المتطلبات.
تحديد المَعلمة userVerification
وفقًا لمواصفات WebAuthn، يمكن لموقع RP طلب التحقّق من هوية المستخدم باستخدام المَعلمة userVerification
عند إنشاء بيانات الاعتماد وتأكيدها. يقبل هذا الحقل القيم 'preferred'
أو 'required'
أو 'discouraged'
، والتي تعني على التوالي:
'preferred'
(الإعداد التلقائي): يُفضَّل استخدام طريقة للتحقّق من هوية المستخدم على الجهاز، ولكن يمكن تخطّيها إذا لم تكن متاحة. تحتوي بيانات اعتماد الاستجابة على قيمة علامة UV تبلغtrue
إذا تم إجراء عملية التحقّق من هوية المستخدم، وfalse
إذا لم يتم إجراء عملية التحقّق من هوية المستخدم.'required'
: يجب استخدام طريقة إثبات هوية المستخدم المتوفّرة على الجهاز. إذا لم يتوفّر أي خيار آخر، سيتعذّر تنفيذ الطلب محليًا. وهذا يعني أنّ بيانات الاعتماد الخاصة بالرد تعرض دائمًا العلامة UV مضبوطة علىtrue
.'discouraged'
: لا يُنصح باستخدام طريقة لإثبات هوية المستخدم. ومع ذلك، قد يتم إثبات هوية المستخدم على أي حال حسب الجهاز، ويمكن أن يحتوي العلم UV على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 التي لا تتوفّر فيها ميزة Touch ID (لأنّ الجهاز لا يتيحها أو لأنّها غير مفعّلة أو لأنّ الجهاز في وضع "الصدفة")، يُطلب من المستخدم إدخال كلمة مرور النظام بدلاً من ذلك. يؤدي ذلك إلى حدوث مشاكل، وقد يتوقف المستخدم عن محاولة المصادقة تمامًا. إذا كان الحدّ من الاحتكاك يهمّك أكثر، استخدِم userVerification='preferred'
.

باستخدام userVerification='preferred'
، تكون قيمة العلامة UV هي true
إذا تم إثبات هوية المستخدم بنجاح، وfalse
إذا تم تخطّي عملية إثبات هوية المستخدم. على سبيل المثال، في نظام التشغيل macOS حيث لا تتوفّر ميزة Touch ID، يطلب من المستخدم النقر على زر لتخطّي عملية إثبات هوية المستخدم، وتتضمّن بيانات اعتماد المفتاح العام علامة false
UV.
ويمكن أن تكون علامة UV إشارة في تحليل المخاطر. إذا بدت محاولة تسجيل الدخول محفوفة بالمخاطر بسبب عوامل أخرى، يمكنك عرض اختبارات تحقّق إضافية من تسجيل الدخول للمستخدم إذا لم يتم إجراء عملية التحقّق من المستخدم.
حالات استخدام userVerification='required'
استخدِم userVerification='required'
إذا كنت تعتقد أنّ كلتا السمتين UP وUV ضروريتان تمامًا.
من سلبيات هذا الخيار أنّ المستخدم قد يواجه صعوبة أكبر عند تسجيل الدخول. على سبيل المثال، على أجهزة macOS التي لا تتوفّر فيها ميزة Touch ID، يُطلب من المستخدم إدخال كلمة مرور النظام.
باستخدام userVerification='required'
، يمكنك التأكّد من إثبات هوية المستخدم على الجهاز. تأكَّد من أنّ الخادم يتحقّق من أنّ علامة UV هي true
.
الخاتمة
من خلال الاستفادة من ميزة إثبات هوية المستخدم، يمكن للجهات التي تعتمد على مفاتيح المرور قياس احتمالية تسجيل مالك الجهاز للدخول. ويعود إليهم قرار ما إذا كانوا سيطلبون إثبات هوية المستخدم أو سيجعلون ذلك اختياريًا حسب مدى تأثير آلية تسجيل الدخول الاحتياطية على مسار المستخدم. تأكَّد من أنّ الخادم يتحقّق من العلامتَين UP وUV لمصادقة المستخدم باستخدام مفتاح المرور.