تاريخ النشر: 12 نوفمبر 2024، تاريخ آخر تعديل: 29 نوفمبر 2024
تتيح واجهة برمجة التطبيقات WebAuthn Signal API لجهات الاعتماد إرسال إشارات إلى موفّري مفاتيح المرور المرتبطين بشأن بيانات الاعتماد الحالية. يتيح ذلك لمقدّم خدمة مفاتيح المرور المتوافق تعديل أو إزالة مفاتيح المرور غير الصحيحة أو التي تم إبطالها من مساحة التخزين الخاصة به، وبالتالي لن يتم عرضها على المستخدمين بعد ذلك.
التوافق
يتوافق Chrome مع Signal API على جميع الأنظمة الأساسية لأجهزة الكمبيوتر وAndroid.
متصفّح Safari متوافق ولكن لم يتم تنفيذه بعد. لم يشارك Firefox رأيه بعد.
يمكن أن يغيّر "مدير كلمات المرور في Google" مفاتيح المرور لتعكس الإشارة. يقرّر مقدّمو مفاتيح المرور المستندون إلى إضافة Chrome على أجهزة الكمبيوتر المكتبي ما إذا كانوا سيعرضون الإشارة.
الخلفية
عند إنشاء مفتاح مرور (بيانات اعتماد قابلة للاكتشاف)، يتم حفظ البيانات الوصفية، مثل اسم المستخدم واسم العرض، لدى مقدّم مفتاح المرور (مثل مدير كلمات المرور) مع المفتاح الخاص، بينما يتم حفظ بيانات اعتماد المفتاح العام على خادم الجهة المعتمِدة. يساعد حفظ اسم المستخدم والاسم المعروض المستخدمين في تحديد مفاتيح المرور المقترَحة التي يجب استخدامها لتسجيل الدخول عند مطالبتهم بذلك. ويكون ذلك مفيدًا بشكل خاص عندما يكون لدى المستخدمين أكثر من مفتاحَي مرور من مقدِّمي خدمات مختلفين.
ومع ذلك، هناك بعض الحالات التي يمكن أن تؤدي فيها التناقضات بين قائمة مفاتيح المرور الخاصة بمزوّد الخدمة وقائمة بيانات الاعتماد الخاصة بالخادم إلى حدوث التباس.
تحدث الحالة الأولى عندما يحذف المستخدم بيانات اعتماد على الخادم. سيؤدي ذلك إلى ترك مفتاح المرور بدون تغيير لدى مقدّم خدمة مفاتيح المرور. في المرة التالية التي يحاول فيها المستخدم تسجيل الدخول باستخدام مفتاح مرور، سيظل موفّر مفتاح المرور يعرض مفتاح المرور هذا للمستخدم. ومع ذلك، ستفشل محاولة تسجيل الدخول لأنّ الخادم لا يمكنه إثبات صحة المفتاح العام الذي تم حذفه.
الحالة الثانية هي عندما يعدّل المستخدم اسم المستخدم أو الاسم المعروض على الخادم. في المرة التالية التي يحاول فيها المستخدم تسجيل الدخول، ستستمر كلمة المرور المخزّنة في خدمة توفير كلمات المرور في عرض اسم المستخدم واسم العرض القديمَين، حتى بعد تعديلهما على الخادم. من المفترض أن تتم مزامنتها.
Signal API
Signal API هي واجهة برمجة تطبيقات WebAuthn تحلّ حالات عدم الاتساق هذه من خلال السماح لمواقع RP بالإشارة إلى التغييرات التي تطرأ على موفّر مفاتيح المرور. هناك ثلاث طرق:
-
PublicKeyCredential.signalUnknownCredential: إشارة إلى عدم توفّر بيانات اعتماد PublicKeyCredential.signalAllAcceptedCredentials: الإشارة إلى قائمة ببيانات الاعتماد المحفوظةPublicKeyCredential.signalCurrentUserDetails: عدّل Signal اسم المستخدم واسم العرض
إشارة إلى عدم توفّر بيانات اعتماد
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 إبلاغ موفّر مفتاح المرور بأنّه تمت إزالة بيانات الاعتماد المحدّدة أو أنّها غير متوفّرة. يحدّد مقدّم مفتاح المرور كيفية التعامل مع هذه الإشارة، ولكن يجب إزالة مفتاح المرور المرتبط بها حتى لا يحاول المستخدمون تسجيل الدخول باستخدام مفتاح مرور لا يتضمّن بيانات اعتماد مرتبطة به.
يمكن استدعاء واجهة برمجة التطبيقات هذه عندما يتعذّر تسجيل الدخول باستخدام مفتاح مرور بسبب عدم توفّر بيانات اعتماد.
بهذه الطريقة، يمكن لموفّر الخدمة منع المستخدمين من محاولة تسجيل الدخول باستخدام مفتاح مرور لا يتضمّن بيانات اعتماد مرتبطة به. على عكس
signalAllAcceptedCredentials، لا تتطلّب منك هذه الطريقة اجتياز قائمة كاملة بمعرّفات بيانات الاعتماد، لذا استخدِمها عندما لا تتم مصادقة المستخدم لتجنُّب الكشف عن عدد مفاتيح المرور لمستخدم معيّن.
إرسال إشارة إلى قائمة بيانات الاعتماد المحفوظة
// 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() بعد أن يسجّل المستخدم الدخول أو يدير إعدادات الحساب. عليك تقديم قائمة بجميع أرقام تعريف بيانات الاعتماد الصالحة لهذا المستخدم. يقارن مقدّم مفتاح المرور هذه القائمة ببيانات التخزين المحلية الخاصة بالطرف المعتمِد. يضع مقدّم مفتاح المرور علامة "مخفي" على أي مفتاح مرور تم العثور عليه في مساحة التخزين ولم يتم تضمينه في قائمة allAcceptedCredentialIds.
لم يعُد النظام يقدّم مفاتيح المرور المخفية هذه لتسجيل الدخول أو الملء التلقائي، ولكن لا يتم حذفها نهائيًا على الفور، ما يتيح إمكانية استعادتها عند الضرورة.
في المقابل، يعيد مقدّم خدمة مفاتيح المرور مفاتيح المرور المتوفّرة في allAcceptedCredentialIds والتي تم وضع علامة "مخفية" عليها.
يتيح ذلك لموقعك الإلكتروني استعادة مفاتيح المرور التي تم إخفاؤها عن طريق الخطأ.
استدعِ واجهة برمجة التطبيقات هذه عندما يحذف المستخدم مفتاح مرور على الجهة المعتمدة وعلى كل عملية تسجيل دخول، ليتمكّن مقدّم خدمة مفاتيح المرور من الاحتفاظ بقائمة متزامنة من مفاتيح المرور.
تعديل اسم المستخدم والاسم المعروض في 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() باستخدام رقم تعريف الجهة المقدّمة للخدمة ورقم تعريف المستخدم واسم المستخدم والاسم المعروض، يمكن للجهة المقدّمة للخدمة إبلاغ مقدّم خدمة مفاتيح المرور بمعلومات المستخدم المعدَّلة. يحدّد مقدّم خدمة مفاتيح المرور كيفية التعامل مع هذه الإشارة، ولكن يجب أن يحدّث مفاتيح المرور التي يملكها المستخدم بمعلومات المستخدم الجديدة.
يمكن استدعاء واجهة برمجة التطبيقات هذه عند تعديل اسم المستخدم أو الاسم المعروض، وعند كل عملية تسجيل دخول، ليتمكّن مقدّم مفتاح المرور من الحفاظ على مزامنة هذه المعلومات مع الخادم.
ملخّص
تساعدك Signal API في إنشاء تجربة أفضل لاستخدام مفاتيح المرور من خلال الحدّ من حالات تعذُّر تسجيل الدخول غير المتوقّعة. تتيح واجهة برمجة التطبيقات Signal API للجهات المعتمِدة إرسال إشارة إلى قائمة بيانات الاعتماد الحالية وبياناتها الوصفية، ما يتيح لها إبقاء مفاتيح المرور متزامنة على موفّر مفاتيح المرور.
لمزيد من المعلومات حول مفاتيح المرور، يمكنك الاطّلاع على مقالة تسجيل الدخول بدون كلمة مرور باستخدام مفاتيح المرور.