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

يساعد 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()

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

  • PasswordCredential
  • FederatedCredential

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

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

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

ما هو WebAuthn؟

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

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

ما هي المشكلة؟

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

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.