الحفاظ على تطابق مفاتيح المرور مع بيانات الاعتماد على خادمك باستخدام Signal API

تاريخ النشر: 12 تشرين الثاني (نوفمبر) 2024

تتيح واجهة برمجة التطبيقات WebAuthn Signal API للأطراف المعتمِدة إرسال إشارات بيانات الاعتماد الحالية إلى مقدّمي مفاتيح المرور المرتبطين. وبفضل ذلك، يمكن لموفّر مفاتيح المرور المتوافق تعديل مفاتيح المرور الخاطئة أو المُلغاة أو إزالتها من مساحة التخزين حتى لا يتم عرضها مجددًا أمام المستخدِمين.

التوافق

يتيح Chrome على أجهزة الكمبيوتر المكتبي استخدام واجهة برمجة التطبيقات Signal API اعتبارًا من الإصدار 132 من Chrome. يمكن لتطبيق "مدير كلمات المرور في Google" تعديل مفاتيح المرور لتعكس الإشارة. بالنسبة إلى موفّري مفاتيح المرور المستندة إلى إضافات Chrome، يحق لهم اختيار ما إذا كانوا يريدون عكس الإشارة أم لا.

ستتوفّر هذه الميزة على Chrome على Android لاحقًا.

متصفّح Safari متوافق لم يتم تنفيذه بعد. لم يشارك Firefox آرائه حتى الآن.

الخلفية

عند إنشاء مفتاح مرور (مَعلمة اعتماد قابلة للاكتشاف)، يتم حفظ البيانات الوصفية، مثل اسم المستخدم والاسم المعروض، في موفِّر مفتاح المرور (مثل مدير كلمات المرور) مع المفتاح الخاص، في حين يتم حفظ مَعلمة اعتماد المفتاح العام في خادم الطرف الموثوق به. يساعد حفظ اسم المستخدم والاسم المعروض المستخدم في تحديد مفاتيح المرور التي يتم تقديمها لتسجيل الدخول باستخدامها عند طلب ذلك. ويُعدّ ذلك مفيدًا بشكل خاص عندما يكون لديهم أكثر من مفتاحَي مرور من موفّري مفاتيح مرور مختلفين.

ومع ذلك، هناك بعض الحالات التي يمكن أن يؤدي فيها عدم الاتساق بين قائمة مفاتيح المرور التي يقدّمها موفّر الخدمة وقائمة بيانات اعتماد الخادم إلى حدوث التباس.

الحالة الأولى هي عندما يحذف مستخدم بيانات اعتماد على الخادم مع ترك مفتاح المرور في مقدّم مفتاح المرور بدون تغيير. في المرة التالية التي يحاول فيها المستخدم تسجيل الدخول باستخدام مفتاح مرور، سيظل مقدّم مفتاح المرور يقدّم مفتاح المرور هذا للمستخدم. ومع ذلك، ستتعذّر محاولة تسجيل الدخول لأنّه لن يتمكّن الخادم من إثبات الهوية باستخدام المفتاح العام الذي تم حذفه.

الحالة الثانية هي عندما يعدّل مستخدم اسم المستخدم أو الاسم المعروض على الخادم. في المرة التالية التي يحاول فيها المستخدم تسجيل الدخول، يستمر مقدّم مفتاح المرور في عرض اسم المستخدم والاسم المعروض القديمَين على الرغم من تعديلهما على الخادم. من المفترض أن تكون متسقة.

Signal API

‫Signal API هي واجهة برمجة تطبيقات WebAuthn تحلّ هذه المشاكل من خلال السماح لجهات الاعتماد بإرسال إشارات إلى مقدّم مفتاح المرور بشأن التغييرات. هناك ثلاث طرق:

الإشارة إلى عدم توفّر بيانات اعتماد

const credential = await navigator.credentials.get({ ... });
const payload = credential.toJSON();

const result = await fetch('/login', { ... });

// Detect authentication failure due to lack of the credential
if (result.status === 404) {
  // Feature detection
  if (PublicKeyCredential.signalUnknownCredential) {
    await PublicKeyCredential.signalUnknownCredential({
      rpId: "example.com",
      credentialId: "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA" // base64url encoded credential ID
    });
  } else {
    // Encourage the user to delete the passkey from the password manager nevertheless.
    ...
  }
}

من خلال الاتصال بخدمة PublicKeyCredential.signalUnknownCredential() باستخدام معرّف مقدّم الخدمة و معرّف مستند الاعتماد، يمكن لمقدّم الخدمة إبلاغ موفّر مفتاح المرور بأنّه تمت إزالة مستند الاعتماد المحدّد أو أنّه غير متوفّر. يُرجى العِلم أنّه يعود إلى مقدّم مفتاح المرور تحديد كيفية التعامل مع هذه الإشارة، ولكن من المتوقّع أن تتم إزالة مفتاح المرور المرتبط حتى لا يتمكّن المستخدم من تسجيل الدخول باستخدام مفتاح المرور لأنّ بيانات الاعتماد المرتبطة به غير متوفّرة.

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

مربّع حوار يظهر عند حذف مفتاح مرور من "مدير كلمات المرور في Google" على Chrome
مربّع حوار يظهر عند حذف مفتاح مرور من "مدير كلمات المرور في Google" على Chrome

الإشارة إلى قائمة ببيانات الاعتماد المحفوظة

// After a user deletes a passkey or a user is signed in.

// Feature detection
if (PublicKeyCredential.signalAllAcceptedCredentials) {
  await PublicKeyCredential.signalAllAcceptedCredentials({
    rpId: "example.com",
    userId: "M2YPl-KGnA8", // base64url encoded user ID
    allAcceptedCredentialIds: [ // A list of base64url encoded credential IDs
      "vI0qOggiE3OT01ZRWBYz5l4MEgU0c7PmAA",
      ...
    ]
  });
}

من خلال الاتصال بـ PublicKeyCredential.signalAllAcceptedCredentials() باستخدام معرّف مقدّم الخدمة ومعرّف المستخدم وقائمة بمعرّفات بيانات الاعتماد المخزّنة، يمكن لمقدّم الخدمة إعلام مقدّم مفتاح المرور ببيانات الاعتماد المتبقية في مساحة التخزين. يُرجى العِلم أنّه على مقدّم مفتاح المرور تحديد كيفية التعامل مع هذه الإشارة، ولكن من المتوقّع أن تتم إزالة مفاتيح المرور التي لا تتماثل مع هذه القائمة لكي لا تظهر مفاتيح المرور للمستخدم عند تسجيل الدخول إذا لم تكن بيانات الاعتماد المرتبطة بها متوفّرة.

يجب استدعاء واجهة برمجة التطبيقات هذه عندما يحذف مستخدم مفتاح مرور على جهاز التحكّم في حدود الجلسة وعند كل عملية تسجيل دخول، حتى يتمكّن مزوّد مفتاح المرور من الاحتفاظ بقائمة متزامنة من مفاتيح المرور.

تم تعديل اسم المستخدم والاسم المعروض في Signal

// After a user updated their username and/or display name
// or a user is signed in.

// Feature detection
if (PublicKeyCredential.signalCurrentUserDetails) {
  await PublicKeyCredential.signalCurrentUserDetails({
    rpId: "example.com",
    userId: "M2YPl-KGnA8", // base64url encoded user ID
    name: "a.new.email.address@example.com", // username
    displayName: "J. Doe"
  });
} else {
}

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

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

مربّع حوار يظهر عند تعديل البيانات الوصفية لمفتاح مرور في "مدير كلمات المرور في Google" على Chrome
مربّع حوار يظهر عند تعديل البيانات الوصفية لمفتاح المرور في "مدير كلمات المرور في Google" على Chrome

ملخّص

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

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