See the original blog version in English here.

Looking for a dev-focused passkey reference? Download our Passkeys Cheat Sheet. Trusted by dev teams at Ally, Stanford CS & more.
WebAuthn هو المعيار الحديث الذي يقف وراء مفاتيح المرور (Passkeys). بدلاً من الاعتماد على كلمات المرور التقليدية، فإنه يستفيد من تشفير المفتاح العام، مما يتيح للمستخدمين المصادقة باستخدام مفاتيح المرور، والتي يمكن أن تتضمن القياسات الحيوية (مثل بصمات الأصابع أو التعرف على الوجه) أو مفاتيح الأمان المادية. هذا التحول لا يعزز الأمان فحسب، بل يحسن أيضاً من تجربة المستخدم من خلال التخلص من الحاجة إلى إدارة كلمات المرور.
يقدم معيار المستوى الثالث من WebAuthn إمكانيات عميل جديدة (والتي يمكن استردادها عبر واجهة
برمجة تطبيقات المتصفح getClientCapabilities())، بهدف تزويد المطورين والمنصات بمزيد من
التحكم والمرونة عند تنفيذ مفاتيح المرور. تجلب هذه التحديثات تحسينات تبسط عملية دمج مفاتيح
المرور عبر الأجهزة، والمتصفحات، والمنصات، مما يضمن رحلة مستخدم أكثر سلاسة واتساقاً.
في هذا المقال، سنجيب على الأسئلة التالية:
بنهاية هذا المقال، ستفهم كيف يمكن أن تساعدك هذه الميزات في إنشاء تدفقات مصادقة سلسة وآمنة تتماشى مع توقعات المستخدمين العصرية.
إمكانيات عميل WebAuthn هي مجموعة من الميزات التي تتيح للمتصفحات والمنصات التواصل بشأن أنواع وظائف WebAuthn التي تدعمها. بعبارات بسيطة، تعمل كـ "قائمة ميزات" تتيح لمواقع الويب معرفة طرق المصادقة والإعدادات المتاحة على جهاز المستخدم. هذا يمكن المطورين من تخصيص تدفقات المصادقة بناءً على إمكانيات العميل، مما يضمن تجربة مستخدم أكثر سلاسة وأماناً.
على سبيل المثال، إذا أشار المتصفح إلى أنه يدعم المصادقة البيومترية (مثل Touch ID)، فيمكن للمطورين تصميم تدفقات تسجيل الدخول الخاصة بهم لتقديم خيار تسجيل الدخول ببصمة الإصبع للمستخدمين. وعلى العكس، إذا كان المتصفح لا يدعم ميزات معينة، يمكن للمطورين توفير خيارات بديلة، مثل كلمة المرور أو رمز SMS OTP. من الناحية العملية، يمكن أن تظهر مسارات الإمكانيات غير المدعومة أو المتقطعة كأخطاء عامة في المتصفح، لذا يجب على فرق العمل تعيين هذه النتائج لتصنيف صريح لأخطاء WebAuthn.
يقدم معيار 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 التي يدعمها. من خلال فهم إمكانيات العميل، يمكن
للمطورين تحسين تدفقات المصادقة للاستفادة من الميزات المتاحة، مثل المصادقة البيومترية،
وتقديم طرق بديلة في حالة غياب بعض الإمكانيات.
Subscribe to our Passkeys Substack for the latest news.
إليك نظرة فاحصة على إمكانيات عميل WebAuthn وكيفية تأثيرها على تكامل مفاتيح المرور:
تتيح ميزة conditionalCreate الإنشاء التلقائي لمفاتيح المرور بناءً على شروط محددة. قد
يستخدم أحد التطبيقات هذه الإمكانية لإنشاء مفتاح مرور تلقائياً أثناء الملء التلقائي لكلمات
المرور إذا كان مدير كلمات المرور يدعم ذلك. تساعد هذه الميزة في تعزيز اعتماد مفاتيح المرور
والاستخدام اللاحق عن طريق نقل المستخدمين تلقائياً من كلمات المرور إلى مفاتيح المرور.
على غرار conditionalCreate، تقوم conditionalGet بتشغيل عمليات تسجيل الدخول بمفاتيح
المرور تلقائياً. هذا مفيد في السيناريوهات التي يجب فيها تفعيل أفضل تجربة مستخدم لمفاتيح
المرور (UX)، مما يجعل تسجيل الدخول ليس فقط بدون كلمة مرور ولكن أيضاً بدون اسم مستخدم (حيث
ينقر المستخدمون ببساطة على مفتاح المرور المحدد في نافذة منبثقة أو قائمة منسدلة ليتم
مصادقتهم). باستخدام هذه الإمكانية، يمكن للمطورين ضمان حدوث مصادقة مفتاح المرور فقط في
الأوقات المناسبة، مما يقلل من المطالبات غير الضرورية ويعزز تجربة المستخدم.
تضمن ميزة hybridTransport إمكانية استخدام مفاتيح المرور عبر أجهزة مختلفة، مما يتيح
مصادقة سلسة عبر الأجهزة (عبر رموز QR والبلوتوث). على سبيل المثال، يمكن للمستخدم استخدام
مفتاح مرور مخزن على هاتفه الذكي لتسجيل الدخول إلى خدمة على جهاز سطح المكتب الخاص به. تتيح
هذه الإمكانية للمستخدمين المصادقة بأمان دون الحاجة إلى نقل مفاتيح المرور يدوياً أو
الاعتماد على طرق تسجيل الدخول التقليدية لكل جهاز، مما يعزز تجربة مصادقة موحدة.
توفر المصدقات (Authenticators) المدمجة في المنصة، مثل Windows Hello أو Face ID أو Touch ID، تجربة أسرع وأكثر سلاسة وأماناً لمفاتيح المرور من خلال تمكين المستخدمين من المصادقة باستخدام القياسات الحيوية أو أي طريقة أخرى مدمجة في الجهاز (مثل نمط PIN).
Become part of our Passkeys Community for updates & support.
تضمن ميزة userVerifyingPlatformAuthenticator أن مصادقة مفتاح المرور تتضمن التحقق من
المستخدم، مثل مسح بصمة الإصبع أو التعرف على الوجه النشط، مما يوفر طبقة أمان إضافية.
تسمح إمكانية relatedOrigins بالمصادقة السلسة عبر نطاقات مختلفة مملوكة لنفس المؤسسة (مثل
amazon.com و amazon.de). على سبيل المثال، إذا كانت الشركة تدير نطاقات متعددة أو لديها
نطاقات فرعية مختلفة، فيمكن للمستخدمين تسجيل الدخول مرة واحدة والوصول إلى جميع الممتلكات
دون إعادة المصادقة على كل منها. هذه الإمكانية تبسط تجربة المستخدم وتقلل الاحتكاك، وهي ذات
قيمة خاصة للشركات في البيئات الدولية أو ذات المنصات متعددة الخدمات.
توفر دالة signalAllAcceptedCredentials(options) القائمة الكاملة لمعرفات بيانات اعتماد
WebAuthn لمستخدم معين. يجب على الأطراف المعتمدة في WebAuthn استخدام هذه الدالة بدلاً من
signalUnknownCredential() عندما يكون المستخدم مصادقاً، حيث لا يوجد خطر من تسريب
الخصوصية. توفر هذه الطريقة نظرة شاملة لبيانات اعتماد المفتاح العام للمستخدم، بما في ذلك أي
تغييرات حديثة قد لا تكون قد تم تحديثها على المصدقات (Authenticators) المتصلة حالياً.
دعونا نلقي نظرة على مثال. مستخدم (بـ userId: A) لديه مفتاحا مرور بمعرفات بيانات اعتماد
مرمزة بصيغة Base64URL إلى X و Y. ثم قام المستخدم بحذف مفتاح المرور X في إعدادات الحساب
الخاصة بخدمة الويب (example.com) (بحيث يتم حذف المفتاح العام). الآن، قم بتشغيل الشيفرة
التالية:
PublicKeyCredential.signalAllAcceptedCredentials({ rpId: "example.com", userId: "A", // WebAuthn User Handle, Base64URL. allAcceptedCredentialIds: ["Y"], });
إذا كان المصدق (Authenticator) متاحاً في وقت تنفيذ الشيفرة أعلاه، فإنه يقوم بحذف أو إخفاء مفتاح المرور X من عمليات المصادقة المستقبلية. ومع ذلك، قد لا يكون المصدق متصلاً في وقت التنفيذ، لذا يوصى بأن تقوم الأطراف المعتمدة بتنفيذ هذه الشيفرة بشكل دوري، على سبيل المثال عند كل تسجيل دخول.
مفاتيح المرور غير الموجودة في allAcceptedCredentialIds ستتم إزالتها أو إخفاؤها، وربما لا
يمكن التراجع عن ذلك. لذا، من المهم للأطراف المعتمدة الانتباه إلى عدم إزالة معرفات بيانات
الاعتماد الصالحة لـ WebAuthn من القائمة أبداً. إذا تمت إزالة معرّف بيانات الاعتماد بالخطأ،
يجب على الطرف المعتمد (Relying Party) إدراجه على الفور في استدعاء
signalAllAcceptedCredentials(options) آخر في أقرب وقت ممكن لـ "إظهار" مفتاح المرور. إذا
تم حذف مفتاح المرور بدلاً من إخفائه، فلا يمكن إصلاح الأمر بسهولة.
Want to experiment with passkey flows? Try our Passkeys Debugger.
تشير دالة signalCurrentUserDetails(options) إلى الاسم الحالي للمستخدم واسم عرض WebAuthn
الخاص به. عند استدعاء signalCurrentUserDetails(options)، يتبع العميل مجموعة من الخطوات
المحددة لتنفيذ هذا الإجراء.
دعونا نرى مثالاً. يقوم مستخدم لديه معرّف المستخدم (User ID) A في WebAuthn بتحديث اسمه في
إعدادات الحساب لموقع ويب (example.com). بعد ذلك، يمكن لـ الطرف المعتمد تشغيل الشيفرة
التالية:
PublicKeyCredential.signalCurrentUserDetails({ rpId: "example.com", userId: "A", // user ID, Base64URL. name: "New user name", displayName: "New display name", });
سيقوم المصدق بعد ذلك بتحديث البيانات الوصفية لمفتاح المرور المحفوظ محلياً. الفائدة الكبيرة هي أنه في طلبات واجهة المستخدم الشرطية (Conditional UI) أو الملء التلقائي لمفاتيح المرور المستقبلية، تعرض قائمة الاختيار أو القائمة المنسدلة لواجهة المستخدم الشرطية الاسم المحدث واسم عرض WebAuthn.
تشير دالة signalUnknownCredential(options) إلى أن معرّف بيانات الاعتماد لـ WebAuthn غير
معروف للطرف المعتمد (Relying Party)، على سبيل المثال، إذا تم حذف مفتاح المرور بواسطة
المستخدم. على عكس signalAllAcceptedCredentials(options)، لا تتطلب هذه الطريقة توفير
القائمة الكاملة لمعرفات بيانات الاعتماد المقبولة ومعرّف المستخدم (User Handle) في
WebAuthn، مما يمنع تسرب الخصوصية المحتمل للمتصلين غير المصادق عليهم.
دعونا نرى مثالاً. يقوم المستخدم بحذف مفتاح مرور بمعرّف بيانات الاعتماد X في إعدادات حساب
موقع ويب (example.com) (بحيث يتم حذف المفتاح العام). ومع ذلك، لا يزال المفتاح الخاص
متاحاً على جهاز المستخدم. هذا يعني أنه في طلبات تسجيل الدخول المستقبلية عبر واجهة المستخدم
الشرطية (Conditional UI) أو الملء التلقائي لمفاتيح المرور (بقائمة allowCredentials
فارغة)، لا يزال من الممكن تحديد مفتاح المرور. ومع ذلك، ستفشل محاولة تسجيل الدخول لأن
المفتاح العام قد تم حذفه بالفعل، لذلك يجب على الطرف المعتمد تشغيل:
PublicKeyCredential.signalUnknownCredential({ rpId: "example.com", credentialId: "X", // credential ID the user just tried, Base64URL });
سيقوم المصدق بعد ذلك بحذف أو إخفاء مفتاح المرور ذي معرّف بيانات الاعتماد X من عمليات
المصادقة المستقبلية.
نظراً لأن معيار WebAuthn المستوى 3 لا يزال في حالة مسودة، فإن اعتماد إمكانيات العميل الجديدة هذه ليس واسع الانتشار بالكامل بعد. بدأت المتصفحات المختلفة في تنفيذ هذه الميزات تدريجياً، لكن الدعم يختلف. يوجد أدناه نظرة عامة محدثة عن التوفر عبر المتصفحات الرئيسية المشار إليها أعلاه:
| المتصفح | الإصدار الداعم لإمكانيات العميل | ملاحظات |
|---|---|---|
| Chrome | 133 | Chrome Platform Status & Chromium Bug Tracker |
| Safari | 17.4+ | أول متصفح يدعم getClientCapabilities(). حتى أكتوبر 2024، يدعم Safari ميزات مثل conditionalCreate و conditionalMediation و hybridTransport و passkeyPlatformAuthenticator و userVerifyingPlatformAuthenticator. |
| Edge | 133 | يعتمد على Chromium 133. Chromium Bug Tracker |
| Firefox | 135 | بدأت Mozilla في تنفيذ إمكانيات عميل WebAuthn المستوى 3 في متصفح Firefox 135 والإصدارات الأحدث. |
من المرجح أن تتسارع وتيرة الاعتماد مع نضوج المستوى 3 ودعم المزيد من المتصفحات لهذه
الميزات. إذا كنت تريد معرفة عدد المستخدمين الذين يمكنهم الاستفادة من
getClientCapabilities() في الوقت الحالي، يمكنك التحقق من بيانات العالم الحقيقي باستخدام
State of Passkeys المجانية. راقب ملاحظات إصدار المتصفح
والوثائق ذات الصلة للتخطيط لتوافق أوسع مع تطور الميزات.
Want to find out how many people use passkeys?
كمطور، قد تسأل نفسك ماذا يعني اكتشاف قدرات عميل WebAuthn الجديدة هذه بالنسبة لك وكيف يجب استخدامها في تطبيقك. فيما يلي تجد توصيات لاستخدامها.
ومع ذلك، كن على دراية بأن ليست كل المتصفحات تدعم حتى الآن استدعاء واجهة برمجة التطبيقات
getClientCapabilities() (حتى نوفمبر 2024). يتوفر حل مؤقت (polyfill)
هنا، يمكن استخدامه حتى تلحق جميع
المتصفحات بالركب.
استخدم getClientCapabilities() مبكراً في الكود الخاص بك لاكتشاف ميزات العميل المدعومة في
بداية تحميل الصفحة أو تدفق المصادقة. سيسمح لك ذلك بتخصيص التجربة ديناميكياً، وتوفير ميزات
مفاتيح المرور التي تعمل على الجهاز أو المتصفح، مثل الدفع نحو مصادقة المنصة عند دعمها أو
تقديم طرق بديلة (مثل رسائل SMS OTP أو
مفاتيح الأمان المادية) إذا لم تكن مدعومة.
إذا أضفت مفاتيح مرور إلى موقع ويب أو تطبيق يستخدم حالياً كلمات المرور، فيمكن أن تكون ميزة
conditionalCreate دافعاً حقيقياً لاعتماد مفاتيح المرور. في الخلفية، وأثناء الملء
التلقائي لكلمات المرور باستخدام مدير بيانات اعتماد مناسب (فقط
Apple Passwords يدعم هذا حتى أكتوبر 2024)، يتم إنشاء
مفتاح مرور تلقائياً وسيكون المفضل في عمليات الملء التلقائي المستقبلية.
للحصول ليس فقط على نسبة عالية من اعتماد مفاتيح المرور، ولكن أيضاً على استخدام عالٍ في
تسجيل الدخول بمفاتيح المرور، حاول التحقق مما إذا كان الجهاز أو المتصفح يمكنه استخدام واجهة
المستخدم الشرطية (Conditional UI) أو الملء التلقائي لمفاتيح المرور عن طريق التحقق من
conditionalGet. بهذه الطريقة ستحث المستخدمين على استخدام مفتاح المرور الذي تم إنشاؤه
لتسجيل الدخول، حيث يتم اقتراحه بشكل استباقي بواسطة نظام التشغيل أو المتصفح ويتطلب جهداً
أقل من الملء التلقائي لكلمة المرور.
استخدم hybridTransport لتمكين المصادقة عبر الأجهزة (عبر رمز الاستجابة السريعة (QR)
والبلوتوث)، مما يسمح للمستخدمين بتسجيل الدخول بسلاسة من هواتفهم الذكية، حتى إذا كانوا
يصلون إلى خدمتك على جهاز سطح مكتب.
تمثل إمكانيات عميل WebAuthn خطوة مهمة إلى الأمام في معالجة الفجوات الموجودة حالياً في مفاتيح المرور. في هذا المقال، تناولنا أسئلة رئيسية حول إمكانيات عميل WebAuthn:
getClientCapabilities و conditionalCreate و
hybridTransport وغيرها.نحن نشجعك على استكشاف ميزات المستوى الثالث من WebAuthn الجديدة والبقاء على اطلاع دائم باعتمادها عبر المتصفحات. إذا كنت تتطلع إلى تنفيذ مفاتيح المرور والاستفادة من هذه الإمكانيات المتقدمة، تواصل معنا للحصول على إرشادات ودعم الخبراء.
استدعِ getClientCapabilities() مبكراً أثناء تحميل الصفحة أو تدفق المصادقة لاكتشاف الميزات المدعومة ديناميكياً. يتيح لك ذلك تقديم المصادقة عبر المنصة عند دعمها، أو توفير بدائل مثل رموز SMS OTP أو مفاتيح الأمان عند عدم توفرها.
تتطلب signalAllAcceptedCredentials القائمة الكاملة لمعرفات بيانات الاعتماد الصالحة ومعرف مستخدم WebAuthn، لذا يجب استدعاؤها فقط عندما يكون المستخدم مصادقاً لتجنب تسريب الخصوصية. تشير signalUnknownCredential إلى معرف بيانات اعتماد واحد غير معروف دون الحاجة إلى القائمة الكاملة، مما يجعل استدعاءها آمناً في السيناريوهات غير المصادق عليها مثل بعد محاولة تسجيل دخول فاشلة.
تتيح ميزة relatedOrigins المصادقة السلسة عبر النطاقات المختلفة المملوكة لنفس المؤسسة، على سبيل المثال amazon.com و amazon.de. يمكن للمستخدمين تسجيل الدخول مرة واحدة والوصول إلى جميع المواقع دون إعادة المصادقة على كل نطاق، مما يقلل من الاحتكاك في البيئات الدولية أو متعددة الخدمات.
اعتباراً من نوفمبر 2024، لا تدعم جميع المتصفحات getClientCapabilities()، لذا يمكنك استخدام الحلول المؤقتة (polyfill) المتاحة في github.com/MasterKale/webauthn-polyfills. من المتوقع أن يتسارع الاعتماد مع نضوج معيار WebAuthn المستوى 3، حيث تدعمها بالفعل متصفحات Chrome 133 و Edge 133 و Firefox 135 و Safari 17.4.
Related Articles
Table of Contents