رصد ميزات WebAuthn بشكلٍ أبسط باستخدام getClientCapabilities()

تاريخ النشر: 15 يناير 2025

توفّر WebAuthn إمكانات فريدة، مثل التفاعل مع البلوتوث للبروتوكول المختلط والتواصل مع مقدّمي مفاتيح المرور واقتراح مفاتيح المرور في ميزة "الملء التلقائي". ومع ذلك، تقدّم برامج المصادقة والعملاء مستويات مختلفة من التوافق مع ميزات WebAuthn. ويمكن أن يؤدي هذا التفاوت إلى تجربة مستخدم مجزأة، حيث قد يواجه بعض المستخدمين أخطاءً أو يتعذّر عليهم استخدام خيارات مصادقة معيّنة. إنّ توفير طريقة للمطوّرين لتحديد إمكانات الأجهزة يتيح لهم إنشاء إجراءات مصادقة أكثر فعالية تتكيّف مع هذه الاختلافات.

تسمح طريقة PublicKeyCredential.getClientCapabilities() للجهات المعتمِدة بتحديد ميزات WebAuthn التي يتوافق معها المتصفّح. تعرض الطريقة وعدًا يتم تنفيذه إلى قائمة بالإمكانات المتوافقة، ما يتيح للمطوّرين تخصيص تجارب وخطوات المصادقة استنادًا إلى الإمكانات المحدّدة للعميل.

التوافق

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

getClientCapabilities()

getClientCapabilities() هي واجهة برمجة تطبيقات WebAuthn تتيح للجهات المعتمِدة تحديد الإمكانات المتاحة. لاستخدام واجهة برمجة التطبيقات، عليك طلب بيانات من خلال PublicKeyCredential.getClientCapabilities(). يتم تحويل الوعد الذي تم عرضه إلى عنصر يحتوي على إمكانات، يشير كل منها إلى مدى توفّره باستخدام true أو false. إذا كانت إمكانية الوصول undefined، يُرجى العِلم بأنّه لا يمكن معرفة ما إذا كانت متاحة أم لا.

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

يمكن للمتصفّح إنشاء بيانات اعتماد بدون واجهة مستخدم مشروطة بارزة إذا كان المستخدم قد وافق مسبقًا على إنشاء بيانات اعتماد.

conditionalGet

يمكن للمتصفّح إثبات الهوية من خلال عرض مفاتيح المرور كجزء من مربّع حوار الملء التلقائي، بدلاً من واجهة مستخدم مشروطة بارزة. الرصيد المكافئ الحالي هو PublicKeyCredential.isConditionalMediationAvailable().

hybridTransport

يمكن للجهاز استخدام البلوتوث ليتمكّن المتصفّح من إنشاء بيانات اعتماد والمصادقة عليها على أجهزة مختلفة باستخدام البروتوكول المختلط. ويعني ذلك عادةً أنّ المتصفّح يمكنه عرض رمز استجابة سريعة ليتمكّن المستخدم من مسحه ضوئيًا وتسجيل الدخول باستخدام هاتف يتضمّن بيانات اعتماد.

passkeyPlatformAuthenticator

يمكن للمتصفّح إنشاء بيانات اعتماد والمصادقة عليها من خلال أداة مصادقة خارجية للتحقّق من هوية المستخدم أو جهاز آخر يتوافق معها من خلال البروتوكول المختلط. هذا الرمز مكافئ للرمز hybridTransport || userVerifyingPlatformAuthenticator.

relatedOrigins

يمكن للمتصفّح إنشاء بيانات اعتماد والمصادقة عليها إذا كانت لا تتطابق مع معرّف RP، طالما تم تحديدها في ملف المصادر ذات الصلة.

signalAllAcceptedCredentials

يمكن للمتصفّح إرسال إشارة إلى بيانات الاعتماد المتاحة على الخادم إلى مقدّم خدمة مفاتيح المرور، ليتمكّن مقدّم خدمة مفاتيح المرور من إبقاء قائمة مفاتيح المرور متسقة مع الخادم.

signalCurrentUserDetails

يمكن للمتصفّح إرسال إشارة تتضمّن معلومات المستخدم، مثل اسم المستخدم واسم العرض، إلى الخادم التابع لمقدّم خدمة مفاتيح المرور، ليتمكّن مقدّم الخدمة من الحفاظ على اتساق معلومات مفتاح المرور مع الخادم.

signalUnknownCredential

يمكن للمتصفّح إرسال إشارة إلى الخادم بشأن بيانات الاعتماد المحذوفة إلى مقدّم خدمة مفاتيح المرور، ليتمكّن مقدّم الخدمة من الحفاظ على اتساق قائمة مفاتيح المرور مع الخادم.

userVerifyingPlatformAuthenticator

يمكن للمتصفّح إنشاء بيانات اعتماد والمصادقة عليها باستخدام أداة مصادقة على منصة. ولا يعني ذلك أنّ المتصفّح يتيح استخدام البروتوكول المختلط. الرصيد المكافئ الحالي هو PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().

الإضافات

يمكن أيضًا لـ "مقدّمي الخدمات" تحديد الإضافات المتاحة باستخدام getClientCapabilities().

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

يتم وضع البادئة extension: قبل المعرّف، يليها اسم إضافة. راجِع معرّفات إضافات WebAuthn المحدّدة في IANA للاطّلاع على أسماء الإضافات.

مزيد من المعلومات

لمزيد من المعلومات حول مفاتيح المرور، ابدأ من مقالة تسجيل الدخول بدون كلمة مرور باستخدام مفاتيح المرور.