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

ملخّص

تساعد تقنية 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 API. على سبيل المثال، يوفّر هذا المعيار للمواقع الإلكترونية طريقة مُعيارَة لتطبيق مصادقة عامل الأمان الثاني باستخدام أجهزة مصادقة متوافقة مع 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.