اكتشف إمكانيات عميل WebAuthn من المستوى 3 عبر getClientCapabilities() لتحسين تكامل مفاتيح المرور، وتعزيز تجربة المستخدم، وتبسيط تدفقات المصادقة.
Vincent
Created: August 8, 2025
Updated: August 8, 2025
See the original blog version in English here.
Our mission is to make the Internet a safer place, and the new login standard passkeys provides a superior solution to achieve that. That's why we want to help you understand passkeys and its characteristics better.
WebAuthn هو المعيار الحديث وراء مفاتيح المرور. فبدلاً من الاعتماد على كلمات المرور التقليدية، فإنه يستفيد من التشفير بالمفتاح العام، مما يمكّن المستخدمين من المصادقة باستخدام مفاتيح المرور، والتي يمكن أن تشمل القياسات الحيوية (مثل بصمات الأصابع أو التعرف على الوجه) أو مفاتيح الأمان المادية. هذا التحول لا يعزز الأمان فحسب، بل يحسن أيضًا تجربة المستخدم من خلال التخلص من الحاجة إلى إدارة كلمات المرور.
يقدم معيار WebAuthn المستوى 3 إمكانيات جديدة للعميل (والتي يمكن استردادها عبر واجهة برمجة تطبيقات المتصفح getClientCapabilities()
)، تهدف إلى منح المطورين والمنصات مزيدًا من التحكم والمرونة عند تطبيق مفاتيح المرور. تجلب هذه التحديثات تحسينات تبسط عملية دمج مفاتيح المرور عبر الأجهزة والمتصفحات والمنصات، مما يضمن رحلة مستخدم أكثر سلاسة واتساقًا.
في هذا المقال، سنجيب على الأسئلة التالية:
بحلول نهاية المقال، ستفهم كيف يمكن لهذه الميزات أن تساعد في إنشاء تدفقات مصادقة سلسة وآمنة تتماشى مع توقعات المستخدمين الحديثة.
Recent Articles
إمكانيات عميل WebAuthn هي مجموعة من الميزات التي تسمح للمتصفحات والمنصات بالإبلاغ عن أنواع وظائف WebAuthn التي تدعمها. بعبارات بسيطة، تعمل كـ "قائمة تحقق للميزات" تتيح لمواقع الويب معرفة طرق المصادقة والإعدادات المتاحة على جهاز المستخدم. وهذا يمكّن المطورين من تخصيص تدفقات المصادقة بناءً على إمكانيات العميل، مما يضمن تجربة مستخدم أكثر سلاسة وأمانًا.
على سبيل المثال، إذا أشار متصفح إلى أنه يدعم المصادقة البيومترية (مثل Touch ID)، يمكن للمطورين تصميم تدفقات تسجيل الدخول الخاصة بهم لتقديم خيار تسجيل الدخول ببصمة الإصبع للمستخدمين. وعلى العكس، إذا كان المتصفح لا يدعم ميزات معينة، يمكن للمطورين توفير خيارات بديلة، مثل كلمة مرور أو رمز OTP عبر الرسائل القصيرة.
يقدم معيار WebAuthn المستوى 3 العديد من إمكانيات العميل الجديدة التي تجعل تطبيقات مفاتيح المرور أكثر تنوعًا وسهولة في الاستخدام. تم تقديم أول دعم لاستدعاء واجهة برمجة التطبيقات getClientCapabilities()
في Safari 17.4.
للكشف عن الدعم في المتصفح، يمكن أن يكون المقتطف التالي مفيدًا:
// Check if PublicKeyCredential is supported in the current browser if (typeof PublicKeyCredential === "undefined") { console.log("PublicKeyCredential is not supported in this browser."); } // Check if getClientCapabilities method exists on PublicKeyCredential if (typeof PublicKeyCredential.getClientCapabilities === "function") { try { let capabilities = await PublicKeyCredential.getClientCapabilities(); console.log(capabilities); } catch (error) { console.error("Error getting client capabilities:", error); } } else { console.log("getClientCapabilities is not supported in this browser"); }
تسمح getClientCapabilities()
لمواقع الويب والتطبيقات بالاستعلام عن العميل (مثل المتصفح أو الجهاز) لتحديد ميزات WebAuthn التي يدعمها. من خلال فهم إمكانيات العميل، يمكن للمطورين تحسين تدفقات المصادقة للاستفادة من الميزات المتاحة، مثل المصادقة البيومترية، وتوفير طرق بديلة إذا كانت بعض الإمكانيات غير موجودة.
إليك نظرة فاحصة على إمكانيات عميل WebAuthn وكيفية تأثيرها على تكامل مفاتيح المرور:
تمكّن conditionalCreate
من الإنشاء التلقائي لمفاتيح المرور بناءً على شروط محددة. قد يستخدم التطبيق هذه الإمكانية لإنشاء مفتاح مرور تلقائيًا أثناء الملء التلقائي لكلمة المرور إذا كان لدى مدير كلمات المرور الدعم المقابل. تساعد هذه الميزة على تعزيز تبني مفاتيح المرور والاستخدام اللاحق لها عن طريق نقل المستخدمين تلقائيًا من كلمات المرور إلى مفاتيح المرور.
على غرار conditionalCreate
، تقوم conditionalGet
بتشغيل عمليات تسجيل الدخول باستخدام مفاتيح المرور تلقائيًا. وهذا مفيد في السيناريوهات التي يجب فيها تمكين أفضل تجربة مستخدم لمفاتيح المرور، مما يجعل تسجيل الدخول ليس فقط بدون كلمة مرور ولكن أيضًا بدون اسم مستخدم (ينقر المستخدمون فقط على مفتاح المرور المحدد في نافذة منبثقة / قائمة منسدلة ويمكنهم المصادقة). باستخدام هذه الإمكانية، يمكن للمطورين ضمان حدوث المصادقة بمفتاح المرور فقط عند الاقتضاء، مما يقلل من المطالبات غير الضرورية ويعزز تجربة المستخدم.
تضمن hybridTransport
إمكانية استخدام مفاتيح المرور عبر أجهزة مختلفة، مما يتيح المصادقة السلسة عبر الأجهزة (عبر رموز QR والبلوتوث). على سبيل المثال، يمكن للمستخدم استخدام مفتاح مرور مخزن على هاتفه الذكي لتسجيل الدخول إلى خدمة على جهاز الكمبيوتر المكتبي الخاص به. تتيح هذه الإمكانية للمستخدمين المصادقة بأمان دون الحاجة إلى نقل مفاتيح المرور يدويًا أو الاعتماد على طرق تسجيل الدخول التقليدية لكل جهاز، مما يعزز تجربة مصادقة موحدة.
أدوات المصادقة المدمجة في المنصة، مثل Windows Hello أو Face ID أو Touch ID، تكون مدمجة مباشرة في الأجهزة وتوفر تجربة مفتاح مرور أسرع وأكثر سلاسة وأمانًا من خلال تمكين المستخدمين من المصادقة باستخدام القياسات الحيوية أو طرق أخرى خاصة بالجهاز (مثل نمط PIN).
تضمن userVerifyingPlatformAuthenticator
أن المصادقة بمفتاح المرور تتضمن تحققًا من المستخدم، مثل مسح بصمة الإصبع النشط أو التعرف على الوجه، مما يوفر طبقة إضافية من الأمان.
تسمح إمكانية relatedOrigins
بالمصادقة السلسة عبر نطاقات مختلفة مملوكة لنفس المؤسسة (على سبيل المثال amazon.com و amazon.de). على سبيل المثال، إذا كانت شركة تدير نطاقات متعددة أو لديها نطاقات فرعية مختلفة، يمكن للمستخدمين تسجيل الدخول مرة واحدة والوصول إلى جميع الخصائص دون إعادة المصادقة في كل مرة. تبسط هذه الإمكانية تجربة المستخدم، وتقلل من الاحتكاك، وهي ذات قيمة خاصة للشركات في البيئات الدولية أو التي لديها منصات متعددة الخدمات.
توفر طريقة signalAllAcceptedCredentials(options)
القائمة الكاملة لـ معرّفات بيانات اعتماد WebAuthn لمستخدم معين. يجب على الأطراف المعتمدة في WebAuthn استخدام هذه الطريقة بدلاً من signalUnknownCredential()
عندما يكون المستخدم مصادقًا عليه، حيث لا يوجد خطر تسرب الخصوصية. توفر هذه الطريقة نظرة شاملة على بيانات اعتماد المفتاح العام للمستخدم، بما في ذلك أي تغييرات حديثة قد لا تكون قد تم تحديثها على أدوات المصادقة المتصلة حاليًا.
دعنا نلقي نظرة على مثال. مستخدم (userId: A
) لديه مفتاحا مرور بمعرّفات بيانات اعتماد يتم ترميزها بـ Base64URL إلى X و Y. ثم يقوم المستخدم بحذف مفتاح المرور X في إعدادات حساب خدمة الويب (example.com
) (وبالتالي يتم حذف المفتاح العام). الآن، قم بتشغيل المقتطف التالي:
PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "A", // WebAuthn User Handle, Base64URL. allAcceptedCredentialIds: ["Y"], });
إذا كانت أداة المصادقة متاحة في وقت تنفيذ الكود أعلاه، فإن أداة المصادقة تحذف أو تخفي مفتاح المرور X من عمليات المصادقة المستقبلية. ومع ذلك، قد لا تكون أداة المصادقة متصلة في وقت التنفيذ، لذلك يوصى بأن تقوم الأطراف المعتمدة بتنفيذ هذا الكود بشكل دوري، على سبيل المثال عند كل تسجيل دخول.
سيتم إزالة أو إخفاء مفاتيح المرور غير الموجودة في allAcceptedCredentialIds
، وقد يكون ذلك بشكل لا رجعة فيه. لذا، من المهم أن تنتبه الأطراف المعتمدة إلى عدم إزالة معرّفات بيانات اعتماد WebAuthn الصالحة من القائمة أبدًا. إذا تم إزالة معرّف بيانات اعتماد صالح عن طريق الخطأ، فيجب على الطرف المعتمد إدراجه فورًا في استدعاء آخر لـ signalAllAcceptedCredentials(options)
في أقرب وقت ممكن لـ "إظهار" مفتاح المرور. إذا لم يتم إخفاء مفتاح المرور بل تم إزالته، فلا يوجد الكثير لإصلاح الأمور.
تشير طريقة signalCurrentUserDetails(options)
إلى اسم المستخدم الحالي واسم العرض الخاص بـ WebAuthn. عند استدعاء signalCurrentUserDetails(options)
، يتبع العميل مجموعة من الخطوات المحددة لتنفيذ هذا الإجراء.
لنرى مثالاً. يقوم مستخدم لديه معرّف مستخدم WebAuthn A
بتحديث اسمه في إعدادات الحساب لموقع ويب (example.com
). بعد ذلك، يمكن لـ الطرف المعتمد تشغيل الكود التالي:
PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "A", // user ID, Base64URL. name: "New user name", displayName: "New display name", });
ستقوم أداة المصادقة بعد ذلك بتحديث البيانات الوصفية لمفتاح المرور المحفوظ محليًا. الفائدة الكبيرة هي أنه في طلبات واجهة المستخدم الشرطية / الملء التلقائي لمفتاح المرور المستقبلية، ستعرض قائمة اختيار الواجهة الشرطية / القائمة المنسدلة الاسم المحدث واسم العرض الخاص بـ WebAuthn.
تشير طريقة signalUnknownCredential(options)
إلى أن معرّف بيانات اعتماد WebAuthn غير معترف به من قبل الطرف المعتمد في WebAuthn، على سبيل المثال، إذا تم حذف مفتاح المرور من قبل المستخدم. على عكس signalAllAcceptedCredentials(options)
، لا تتطلب هذه الطريقة توفير القائمة الكاملة لمعرّفات بيانات الاعتماد المقبولة ومعرّف المستخدم الخاص بـ WebAuthn، وبالتالي تمنع تسرب الخصوصية المحتمل للمتصلين غير المصادق عليهم.
لنرى مثالاً. يقوم مستخدم بحذف مفتاح مرور بـ معرّف بيانات اعتماد X
على إعدادات حساب موقع ويب (example.com
) (وبالتالي يتم حذف المفتاح العام). ومع ذلك، لا يزال المفتاح الخاص متاحًا على جهاز المستخدم. هذا يعني أنه في طلبات تسجيل الدخول المستقبلية باستخدام الواجهة الشرطية / الملء التلقائي لمفتاح المرور (مع قائمة allowCredentials
فارغة)، لا يزال من الممكن تحديد مفتاح المرور. ستفشل محاولة تسجيل الدخول على الرغم من ذلك، حيث تم حذف المفتاح العام بالفعل، لذلك يجب على الطرف المعتمد تشغيل:
PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "X", // credential ID the user just tried, Base64URL });
ستقوم أداة المصادقة بعد ذلك بحذف أو إخفاء مفتاح المرور الذي يحمل معرّف بيانات الاعتماد X
من عمليات المصادقة المستقبلية.
نظرًا لأن معيار WebAuthn المستوى 3 لا يزال في حالة مسودة، فإن تبني إمكانيات العميل الجديدة هذه لم ينتشر بالكامل بعد. تقوم المتصفحات المختلفة بتطبيق هذه الميزات تدريجيًا، لكن الدعم يختلف. فيما يلي نظرة عامة محدثة على التوفر عبر المتصفحات الرئيسية المشار إليها أعلاه:
المتصفح | الإصدار الذي يدعم إمكانيات العميل | ملاحظات |
---|---|---|
Chrome | 133 | حالة منصة Chrome و متتبع أخطاء Chromium |
Safari | 17.4+ | أول متصفح يشحن getClientCapabilities(). اعتبارًا من أكتوبر 2024، يدعم Safari ميزات مثل conditionalCreate و conditionalMediation و hybridTransport و passkeyPlatformAuthenticator و userVerifyingPlatformAuthenticator . |
Edge | 133 | مبني على Chromium 133. متتبع أخطاء Chromium |
Firefox | 135 | بدأت Mozilla في تطبيق إمكانيات عميل WebAuthn المستوى 3 في Firefox 135 وما فوق. |
من المرجح أن تتسارع وتيرة التبني مع نضوج المستوى 3 وشحن المزيد من المتصفحات لهذه الميزات. إذا كنت تريد أن ترى عدد المستخدمين الذين يمكنهم الاستفادة من getClientCapabilities()
الآن، يمكنك التحقق من البيانات الواقعية باستخدام Passkeys Analyzer المجاني. راقب ملاحظات إصدار المتصفح والوثائق ذات الصلة للتخطيط لتوافق أوسع مع تطوره.
كمطور، قد تسأل نفسك ماذا يعني لك اكتشاف إمكانيات عميل WebAuthn الجديدة هذه وكيف يجب عليك استخدامها في تطبيقك. في ما يلي، تجد توصيات لاستخدامها.
ومع ذلك، كن على علم بأن ليس كل المتصفحات تدعم بعد استدعاء واجهة برمجة التطبيقات getClientCapabilities()
(اعتبارًا من نوفمبر 2024). يتوفر polyfill هنا، والذي يمكن استخدامه حتى تلحق جميع المتصفحات بالركب.
استخدم getClientCapabilities()
في وقت مبكر من الكود الخاص بك لاكتشاف الميزات المدعومة من قبل العميل في بداية تحميل الصفحة / تدفق المصادقة. سيسمح لك ذلك بتخصيص التجربة ديناميكيًا، وتوفير ميزات مفاتيح المرور التي تعمل على الجهاز / المتصفح، على سبيل المثال، الدفع نحو المصادقة عبر المنصة عند دعمها أو تقديم طرق بديلة (مثل رموز OTP عبر الرسائل القصيرة أو مفاتيح الأمان المادية) إذا لم تكن مدعومة.
إذا أضفت مفاتيح المرور إلى موقع ويب / تطبيق يستخدم حاليًا كلمات المرور، يمكن أن تكون ميزة conditionalCreate
معززًا حقيقيًا لـ تبني مفاتيح المرور لديك. في الخلفية، أثناء الملء التلقائي لكلمة المرور باستخدام مدير بيانات اعتماد مناسب (فقط Apple Passwords اعتبارًا من أكتوبر 2024)، يتم إنشاء مفتاح مرور تلقائيًا وسيتم تفضيله في عمليات الملء التلقائي المستقبلية.
ليس فقط للحصول على تبني عالٍ لمفاتيح المرور، ولكن أيضًا استخدام عالٍ لـ تسجيل الدخول بمفتاح المرور، حاول التحقق مما إذا كان الجهاز / المتصفح يمكنه استخدام الواجهة الشرطية / الملء التلقائي لمفتاح المرور عن طريق التحقق من conditionalGet
. بهذه الطريقة، ستدفع المستخدمين إلى استخدام مفتاح المرور الذي تم إنشاؤه لتسجيل الدخول، حيث يتم اقتراحه بشكل استباقي من قبل نظام التشغيل / المتصفح ويتطلب جهدًا أقل من الملء التلقائي لكلمة المرور.
استخدم hybridTransport
لتمكين المصادقة عبر الأجهزة (عبر رمز الاستجابة السريعة والبلوتوث)، مما يسمح للمستخدمين بتسجيل الدخول بسلاسة من هواتفهم الذكية، حتى لو كانوا يصلون إلى خدمتك على جهاز كمبيوتر مكتبي.
تمثل إمكانيات عميل WebAuthn خطوة مهمة إلى الأمام في معالجة الفجوات الحالية في مفاتيح المرور. في هذا المقال، تناولنا أسئلة رئيسية حول إمكانيات عميل WebAuthn:
getClientCapabilities
و conditionalCreate
و hybridTransport
والمزيد.نشجعك على استكشاف ميزات WebAuthn المستوى 3 الجديدة والبقاء على اطلاع دائم بتبنيها عبر المتصفحات. إذا كنت تتطلع إلى تطبيق مفاتيح المرور والاستفادة من هذه الإمكانيات المتقدمة، تواصل معنا للحصول على إرشادات ودعم متخصص.
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.
Related Articles
Table of Contents