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