فحص ميزة رصد ميزات واجهة برمجة التطبيقات لإدارة بيانات الاعتماد

ملخّص

تساعد WebAuthn على زيادة مستوى الأمان من خلال توفير المصادقة المستندة إلى بيانات اعتماد المفتاح العام على الويب، وستتوفّر قريبًا في متصفّحات Chrome وFirefox وEdge (وفقًا للمواصفات المعدّلة). وتضيف نوعًا جديدًا من عناصر Credential، ولكن قد تعطّل المواقع الإلكترونية التي تستخدم واجهة برمجة التطبيقات لإدارة بيانات الاعتماد بدون رصد الميزات لأنواع بيانات الاعتماد المحدّدة التي تستخدمها.

في حال تنفيذ هذا الإجراء حاليًا لرصد الميزات

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
    // use CM API
}

افعل هذه بدلاً من ذلك

if (window.PasswordCredential || window.FederatedCredential) {
    // Call navigator.credentials.get() to retrieve stored
    // PasswordCredentials or FederatedCredentials.
}

if (window.PasswordCredential) {
    // Get/Store PasswordCredential
}

if (window.FederatedCredential) {
    // Get/Store FederatedCredential
}

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
    // Call navigator.credentials.preventSilentAccess()
}

يمكنك الاطّلاع على التغييرات التي تم إجراؤها على الرمز النموذجي كمثال.

تابع القراءة لمعرفة المزيد.

ما هي Credential Management API؟

تتيح Credential Management API (CM API) للمواقع الإلكترونية الوصول بشكل آلي إلى مخزن بيانات اعتماد وكيل المستخدم لتخزين/استرداد بيانات اعتماد المستخدم لمصدر الاتصال.

واجهات برمجة التطبيقات الأساسية هي:

  • navigator.credentials.get()
  • navigator.credentials.store()
  • navigator.credentials.create()
  • navigator.credentials.preventSilentAccess()

تحدّد المواصفات الأصلية لواجهة برمجة التطبيقات في خدمة CM API نوعَين من بيانات الاعتماد:

  • PasswordCredential
  • FederatedCredential

PasswordCredential هي بيانات اعتماد تحتوي على رقم تعريف المستخدم وكلمة المرور. إنّ FederatedCredential عبارة عن بيانات اعتماد تحتوي على رقم تعريف المستخدم وسلسلة تمثل موفّر الهوية.

باستخدام بيانات الاعتماد هذه، يمكن للمواقع الإلكترونية إجراء ما يلي:

  • السماح للمستخدم بتسجيل الدخول باستخدام بيانات اعتماد موحّدة أو مستندة إلى كلمة مرور تم حفظها سابقًا فور وصولها (تسجيل الدخول التلقائي)،
  • تخزين بيانات الاعتماد المستندة إلى كلمة المرور أو بيانات الاعتماد الموحّدة التي سجَّل المستخدم الدخول بها
  • إبقاء بيانات اعتماد تسجيل دخول المستخدم محدَّثة (على سبيل المثال، بعد تغيير كلمة المرور)

ما هي WebAuthn؟

تضيف WebAuthn (مصادقة الويب) بيانات اعتماد المفتاح العام إلى واجهة برمجة التطبيقات CM API. على سبيل المثال، يمنح هذا النموذج المواقع الإلكترونية طريقة موحّدة لتنفيذ المصادقة الثنائية باستخدام أجهزة مصادقة متوافقة مع FIDO 2.0.

على المستوى التقني، توسّع WebAuthn واجهة برمجة تطبيقات CM باستخدام واجهة PublicKeyCredential.

ما المشكلة؟

في السابق، كنّا نوجِّه إرشادات المطوّرين لرصد واجهة برمجة التطبيقات CM API من خلال الرمز التالي:

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
  // Use CM API
}

But as you can see from the descriptions above, the `navigator.credentials` is
now expanded to support public-key credentials in addition to password
credentials and federated credentials.

The problem is that user agents don't necessarily support all kinds of
credentials. If you continue feature detect using `navigator.credentials`, your
website may break when you are using a certain credential type not supported by
the browser.

**Supported credential types by browsers**
<table class="properties with-heading-tint"><tbody><tr>
<th></th>
<th>PasswordCredential / FederatedCredential</th>
<th>PublicKeyCredential</th>
</tr><tr><th>Chrome
</th><td>Available
</td><td>In development
</td></tr><tr><th>Firefox
</th><td>N/A
</td><td>Aiming to ship on 60
</td></tr><tr><th>Edge
</th><td>N/A
</td><td>Implemented with <a href="https://blogs.windows.com/msedgedev/2016/04/12/a-world-without-passwords-windows-hello-in-microsoft-edge/">older API</a>. New API (navigator.credentials) coming soon.
</td></tr></tbody></table>


## The solution
You can avoid this by modifying feature detection code as follows to explicitly
test for the credential type that you intend to use.

```js
if (window.PasswordCredential || window.FederatedCredential) {
    // Call navigator.credentials.get() to retrieve stored
    // PasswordCredentials or FederatedCredentials.
}

if (window.PasswordCredential) {
    // Get/Store PasswordCredential
}

if (window.FederatedCredential) {
    // Get/Store FederatedCredential
}

if (navigator.credentials && navigator.credentials.preventSilentAccess) {
    // Call navigator.credentials.preventSilentAccess()
}

يمكنك الاطّلاع على التغييرات الفعلية التي تم إجراؤها على الرمز النموذجي كمثال.

كمرجع لك، إليك كيفية رصد PublicKeyCredential التي تمت إضافتها في WebAuthn:

if (window.PublicKeyCredential) {
    // use CM API with PublicKeyCredential added in the WebAuthn spec
}

المخطط الزمني

أوّل إصدار يتوفّر من WebAuthn هو Firefox، ومن المقرر أن يصبح مستقرًا قرابة أوائل شهر أيار (مايو) 2018.

أَخِيرًا

إذا كانت لديك أي أسئلة، يُرجى إرسالها إلى @agektmr أو agektmr@chromium.org.