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

تاريخ النشر: 12 نوفمبر 2024، تاريخ آخر تعديل: 29 نوفمبر 2024

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

التوافق

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

سيتوفّر Chrome على أجهزة Android في وقت لاحق.

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

الخلفية

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

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

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

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

Signal API

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

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

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() باستخدام معرّف RP ومعرّف بيانات اعتماد، يمكن لموفّر RP إبلاغ موفّر مفتاح المرور بأنّه تمت إزالة بيانات الاعتماد المحدّدة أو أنّها غير متوفّرة. يعود إلى مقدّم مفتاح المرور تحديد كيفية التعامل مع هذه الإشارة، ولكن من المتوقّع أن تتم إزالة مفتاح المرور المرتبط بها حتى لا يتمكّن المستخدم من تسجيل الدخول باستخدام مفتاح المرور لأنّ بيانات الاعتماد المرتبطة به غير متوفّرة.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

يمكن استدعاء واجهة برمجة التطبيقات هذه عندما يتعذّر تسجيل الدخول باستخدام مفتاح مرور بسبب عدم توفّر بيانات اعتماد. بهذه الطريقة، يمكن لموفّر الخدمة منع المستخدم من محاولة تسجيل الدخول باستخدام مفتاح مرور لا يتضمّن بيانات اعتماد مرتبطة به. على عكس 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() باستخدام معرّف RP ومعرّف مستخدم وقائمة بمعرّفات بيانات الاعتماد المخزّنة، يمكن لموقع RP إبلاغ مقدّم مفاتيح المرور ببيانات الاعتماد المتبقية في مساحة التخزين. يعود إلى مقدّم خدمة مفاتيح المرور تحديد كيفية التعامل مع هذه الإشارة، ولكن من المتوقّع أن تتم إزالة مفاتيح المرور التي لا تتطابق مع هذه القائمة حتى لا يرى المستخدم مفاتيح مرور عند تسجيل الدخول لا تتوفّر بيانات الاعتماد المرتبطة بها.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

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

Signal updated username and display name

// 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() باستخدام معرّف RP ومعرّف مستخدم واسم مستخدم واسم معروض، يمكن لمزوّد الخدمة إبلاغ مزوّد مفتاح المرور بمعلومات المستخدم المعدَّلة. يعود إلى مقدّم مفاتيح المرور تحديد كيفية التعامل مع هذه الإشارة، ولكن من المتوقّع أن يتم تعديل مفاتيح المرور التي يملكها المستخدم لتتضمّن معلومات المستخدم الجديدة.

Browser Support

  • Chrome: 132.
  • Edge: 132.
  • Firefox: not supported.
  • Safari: 26.

Source

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

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

ملخّص

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

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