Get your free and exclusive +45-page Authentication Analytics Whitepaper
العودة إلى النظرة العامة

ورقة عمل مفاتيح المرور للمطورين

الدليل الشامل للمطورين حول WebAuthn وتنفيذ مفاتيح المرور (passkeys). قم بتنزيل ورقة العمل كملف PDF أو استخدم هذا الموقع للحصول على جميع المعلومات.

Blog-Post-Author

Lukas R.

تاريخ الإنشاء: 6 مارس 2024

آخر تحديث: 3 يوليو 2026

ورقة عمل مفاتيح المرور للمطورين

تمت ترجمة هذه الصفحة تلقائياً. اقرأ النسخة الأصلية باللغة الإنجليزية هنا.

حمل مجاناً من هنا#

قم بتنزيل ورقة عمل مفاتيح المرور الكاملة مجانًا واحصل على جميع الرؤى والأفكار.

  • ✅ أكثر من 4,000 عملية تنزيل بالفعل
  • ✅ طُلب من قِبل فرق التطوير في Ally و Kmart و Octopus Energy و Stanford CS
  • ✅ بدون حشو تسويقي - فقط رؤى فنية وتقنية

دليل مطوري مفاتيح المرور الشامل

قم بتنزيل ورقة عمل مفاتيح المرور

احصل على مرجع موجه للمطورين لكل ما يخص مفاتيح المرور يغطي دعم المنصات، وسلوك المتصفح، وأفضل ممارسات تجربة المستخدم، ونصائح التكامل.

قم بتنزيل ورقة عمل مفاتيح المرور

قم بتنزيل ورقة عمل مفاتيح المرور مجانًا

حقائق أساسية
  • تستخدم المصادقة باستخدام مفاتيح المرور عمليتين: التسجيل (attestation) وتسجيل الدخول (assertion)، وكل منهما تتطلب تحديًا عشوائيًا يتم إنشاؤه بواسطة الخادم وموقعًا من قِبل الموثق (authenticator).
  • يتحكم كائن PublicKeyCredentialCreationOptions في تسجيل مفتاح المرور بينما يتحكم PublicKeyCredentialRequestOptions في تسجيل الدخول. يتم إنشاء كلا الكائنين من جهة الخادم ويحتويان على التحدي الذي سيوقعه الموثق.
  • تعرض واجهة المستخدم الشرطية (Conditional UI) مفاتيح المرور المتاحة كاقتراحات للملء التلقائي ولكنها تتطلب بيانات اعتماد قابلة للاكتشاف (مفاتيح مقيمة) وغير مدعومة عبر جميع مجموعات أنظمة التشغيل والمتصفحات.
  • يربط معرف الطرف المعتمد (rpID) مفتاح المرور بنطاق معين: لا تنجح المصادقة إلا عندما يتطابق عنوان URL مع rpID أو يكون نطاقًا فرعيًا (غير موجود في قائمة اللاحقات العامة).
  • تستخدم مفاتيح المرور خوارزميات COSE لإنشاء المفاتيح، مع تسجيل الخوارزمية المحددة في سمة parsedCredentialPublicKey لكائن attestation.

1. عمليات WebAuthn#

تعتمد المصادقة باستخدام مفاتيح المرور على العمليتين أو الإجراءين، التسجيل (المعروف أيضًا باسم مرحلة الإثبات attestation) و تسجيل الدخول (المعروف أيضًا باسم مرحلة التأكيد assertion).
تتطلب كل مرحلة تحديًا عشوائيًا (challenge) ينشئه الخادم، والذي يوقعه الموثق ويتم إرساله مرة أخرى إلى خادم WebAuthn للتحقق من المستخدم.

Debugger Icon

اختبر تدفقات passkey في Passkeys Debugger.

جرّب مجاناً

1.1 التسجيل (Attestation)#

تستخدم عملية التسجيل كائنين مركزيين: PublicKeyCredentialCreationOptions و attestation.

1.2 تسجيل الدخول (Assertion)#

تستخدم عملية تسجيل الدخول كائنين مركزيين: PublicKeyCredentialRequestOptions و assertion.

StateOfPasskeys Icon

اطلع على عدد الأشخاص الذين يستخدمون passkeys فعلياً.

عرض بيانات الاعتماد

2. الكائنات المهمة#

للتسجيل وتسجيل الدخول باستخدام مفاتيح المرور، هناك أربعة كائنات رئيسية:

  • PublicKeyCredentialCreationOptions
  • PublicKeyCredentialRequestOptions
  • attestation
  • assertion

يشرح هذا القسم أيضًا كائن authenticatorSelection، والذي يُستخدم في PublicKeyCredentialCreationOptions.

Igor Gjorgjioski Testimonial

Igor Gjorgjioski

Head of Digital Channels & Platform Enablement, VicRoads

We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.

See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.

Read the case study

2.1 خيارات إنشاء بيانات اعتماد المفتاح العام (Public Key Credential Creation Options)#

يعد PublicKeyCredentialCreationOptions الكائن المركزي لمرحلة الإثبات (التسجيل). يتم إنشاؤه وإرجاعه من خادم WebAuthn.

{ "PublicKeyCredentialCreationOptions": { "rp": { "id": "passkeys.eu", "name": "Corbado Passkeys Demo" }, "user": { "displayName": "john.doe", "id": "dXNyLZ….DU10Tc", "name": "john@doe.com" }, "challenge": "888fix4Bus...pHHr3Y", "pubKeyCredParams": [ { "alg": -7, "type": "public-key" }, { "alg": -257, "type": "public-key" } ], "excludeCredentials": [], "authenticatorSelection": { "authenticatorAttachment": "platform", "residentKey": "required", "userVerification": "required" }, "attestation": "none", "extensions": {} } }

يحتوي الكائن على هذه السمات:

  • rp: يحدد الطرف المعتمد (Relying Party = الخادم الذي يتطلع إلى مصادقة المستخدم)، راجع القسم 4.2 معرف الطرف المعتمد (rpID).
  • user: يحتوي على بيانات حول حساب المستخدم الذي يطلب الإثبات. المعرف (ID) عبارة عن تسلسل بايت يختاره الطرف المعتمد، والذي يجب ألا يحتوي على معلومات شخصية. يتم حفظ اسم المستخدم أو عنوان البريد الإلكتروني بدلاً من ذلك في سمة name أو displayName. اقرأ المزيد حول هذا في القسم 4.1 مخطط قاعدة البيانات.
  • challenge: عبارة عن BufferSource عشوائي مشفر بـ base64URL يجب أن يوقعه الموثق.
  • pubKeyCredParams: سمات محددة لبيانات الاعتماد التي سيتم إنشاؤها، وعادة ما تكون الخوارزمية (الخوارزميات) المدعومة.
  • timeout: وقت اختياري بالمللي ثانية لانتظار العميل حتى يكتمل الاستدعاء.
  • excludeCredentials: قائمة اختيارية ببيانات الاعتماد للحد من إنشاء مفاتيح مرور متعددة على جهاز واحد.
  • authenticatorSelection: اختيار اختياري للموثق المستخدم للطريقة، على سبيل المثال ما إذا كان مفتاح residentKey مطلوبًا. راجع 2.5 authenticatorSelection.
  • attestation: يمكن استخدامه لطلب تمرير كائن الإثبات إلى الطرف المعتمد في نموذج معين. القيم الممكنة هي none (الافتراضي) و indirect و direct و enterprise.
  • extensions: طلب (طلبات) اختيارية للمعالجة الإضافية، مثل قيم إرجاع محددة. على سبيل المثال:
    • يطلب credProbs معلومات حول ما إذا كانت بيانات الاعتماد المنشأة قابلة للاكتشاف.
    • يسمح prf للطرف المعتمد باستخدام المخرجات من وظيفة شبه عشوائية (PRF) مرتبطة ببيانات الاعتماد.
Substack Icon

اشترك في Passkeys Substack للحصول على آخر الأخبار.

اشترك

2.2 خيارات طلب بيانات اعتماد المفتاح العام (Public Key Credential Request Options)#

يعد PublicKeyCredentialRequestOptions الكائن المركزي لمرحلة التأكيد (تسجيل الدخول). يتم إنشاؤه وإرجاعه من خادم WebAuthn.

{ "publicKeyCredentialRequestOptions": { "challenge": "pT7HMA-…dFPHk", "timeout": 500, "rpId": "passkeys.eu", "userVerification": "preferred", "allowCredentials": [], "extensions": [] } }

يحتوي الكائن على هذه السمات:

  • challenge, timeout, extensions: راجع أعلاه.
  • rpId: معرف الطرف المعتمد لطلب التأكيد، راجع القسم 4.2 معرف الطرف المعتمد (rpID).
  • allowCredentials: قائمة اختيارية ببيانات الاعتماد المسموح بها للمصادقة، تشير إلى تفضيل المتصل بترتيب تنازلي. سيتم ملء هذه القائمة بـ PublicKeyCredentialDescriptors.
  • userVerification: قيمة اختيارية لتحديد متطلبات التحقق من المستخدم أثناء العملية. القيم الممكنة هي preferred (الافتراضي) أو required أو discouraged.

2.3 الإثبات (Attestation)#

أثناء عملية الإثبات / التسجيل، يُرجع الموثق استجابة التسجيل هذه. يمكنك تجربة ذلك بنفسك في Passkeys Debugger.

{ "authenticatorAttachment": "platform", "id": "JKZbixUfKN_aZtimefYT-OjH5dw", "rawId": "JKZbixUfKN_aZtimefYT-OjH5dw", "response": { "attestationObject": { "fmt": "none", "attStmt": {}, "authData": { "rpIdHash": "PpZrl-Wqt-OFfBpyy2SraN1m7LT0GZORwGA7-6ujYkM", "flags": { "userPresent": true, "userVerified": true, "backupEligible": true, "backupStatus": true, "attestedData": true, "extensionData": false }, "counter": 0, "aaguid": { "raw": "fbfc3007-154e-4ecc-8c0b-6e020557d7bd", "name": "iCloud Keychain" }, "credentialID": "JKZbixUfKN_aZtimefYT-OjH5dw", "credentialPublicKey": "pQECAyYgASFYIPWLalDzyxIDmAADvfK8iNM5To50kh7TyPH-teEz8RMdIlgg3D7bPIWQJ8z-WFn3zdYZzJw9c7mhPdmflQqD9vV7efA", "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "9YtqUPPLEgOYAAO98ryI0zlOjnSSHtPI8f614TPxEx0", "y": "3D7bPIWQJ8z-WFn3zdYZzJw9c7mhPdmflQqD9vV7efA" } } }, "clientDataJSON": { "type": "webauthn.create", "challenge": "k2p6f-upzP_hc6NZvmMAxiI0VSTeQIeXXVRGW62LTj0", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false }, "transports": ["hybrid", "internal"], "authenticatorData": "PpZrl-Wqt-OFfBpyy2SraN1m7LT0GZORwGA7-6ujYkNdAAAAAPv8MAcVTk7MjAtuAgVX170AFCSmW4sVHyjf2mbYpnn2E_jox-XcpQECAyYgASFYIPWLalDzyxIDmAADvfK8iNM5To50kh7TyPH-teEz8RMdIlgg3D7bPIWQJ8z-WFn3zdYZzJw9c7mhPdmflQqD9vV7efA", "publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9YtqUPPLEgOYAAO98ryI0zlOjnSSHtPI8f614TPxEx3cPts8hZAnzP5YWffN1hnMnD1zuaE92Z-VCoP29Xt58A", "publicKeyAlgorithm": -7 }, "type": "public-key", "clientExtensionResults": {} }

يحتوي الإثبات على بعض المكونات المهمة مثل attestationObject و algorithm وعلامات transport.

2.3.1 كائن الإثبات (attestationObject)#

مأخوذ من مواصفات Webauthn الصادرة عن W3C

يعد attestationObject كائنًا مشفرًا بـ CBOR، ويحتوي على معلومات حول بيانات الاعتماد التي تم إنشاؤها حديثًا، والمفتاح العام، والبيانات الأخرى ذات الصلة:

  • يتم تقييم fmt عادةً إلى "none" لمفاتيح المرور.
  • تكون attStmt فارغة لمفاتيح المرور ومليئة للموثقات الأخرى، على سبيل المثال مفتاح أمان الأجهزة.
  • عبارة عن مخزن مؤقت authData للقيم يحتوي على البيانات التالية:

اقرأ المزيد حول الإضافات (extensions).

الخوارزمية (algorithm)#

يتم إنشاء مفاتيح المرور باستخدام خوارزميات COSE، مع الإشارة إلى الخوارزمية المستخدمة في سمة algorithm الخاصة بـ parsedCredentialPublicKey في كائن الإثبات.
إليك نظرة عامة على خوارزميات COSE الأكثر صلة:

2.3.2 النقل (transport)#

تشير خاصية transports إلى الآليات التي يمكن للموثق من خلالها التواصل مع العميل. بعض المجموعات الشائعة للقيم النموذجية هي:

  • "transports": ["internal","hybrid"]: يمكن استخدام مفاتيح المرور من موثق المنصة (مثل Face ID و Touch ID و Windows Hello) أو عبر المصادقة عبر الأجهزة (باستخدام رمز الاستجابة السريعة والبلوتوث).
  • "transports": ["internal"]: يمكن استخدام مفاتيح المرور فقط من موثق المنصة (مثل Face ID و Touch ID و Windows Hello).
  • عدم تعيين خاصية "transports": السلوك الافتراضي الذي لا يعطي أي مؤشرات.

2.4 التأكيد (Assertion)#

أثناء عملية التأكيد / تسجيل الدخول، يُرجع الموثق استجابة تسجيل الدخول هذه. يمكنك تجربة ذلك بنفسك في Passkeys Debugger.

{ "id": "JKZbixUfKN_aZtimefYT-OjH5dw", "rawId": "JKZbixUfKN_aZtimefYT-OjH5dw", "type": "public-key", "authenticatorAttachment": "platform", "response": { "authenticatorData": { "rpIdHash": "PpZrl-Wqt-OFfBpyy2SraN1m7LT0GZORwGA7-6ujYkM", "flags": { "userPresent": true, "userVerified": true, "backupEligible": true, "backupStatus": true, "attestedData": false, "extensionData": false }, "counter": 0 }, "clientDataJSON": { "type": "webauthn.get", "challenge": "GCVkITWbe2l2dttsn_DgJYvH9QPHPDo0ygWgcgI6B7U", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false, "other_keys_can_be_added_here": "do not compare clientDataJSON against a template. See https://goo.gl/yabPex" }, "signature": "MEQCIA-orC8N2KKWOxyY17BWP8lB-Be5to9btXRnJZf2SLhXAiBGxJe5Eu5LwOTbsyzAYmIXHOhlC3pN7s7Q1fRLvEW57g", "userHandle": "_FKz1uwqmR_3yGq6hJntzoIFwFC_d1u_53YRELh0KlE" } }

يحتوي التأكيد على بعض المكونات المهمة مثل العلامات (flags) والتوقيع (signature) ومعالج المستخدم (userHandle).

2.4.1 العلامات (flags)#

إليك نظرة عامة على العلامات الأكثر صلة ومجموعاتها:

2.4.2 التوقيع (signature)#

يتم استخدام التوقيع للتحقق من أن المستخدم الذي يحاول تسجيل الدخول يمتلك بالفعل المفتاح الخاص. يتم إنشاء التوقيع عن طريق ربط authenticatorData و clientDataHash (أي إصدار SHA-256 من ClientDataJSON) وتوقيع النتيجة بالمفتاح الخاص (في الموثق). للتحقق باستخدام المفتاح العام، نقوم بربط authenticatorData و clientDataHash أيضًا. إذا أرجعت نتيجة التحقق true، فهذا يعني نجاح المصادقة.

2.4.3 معالج المستخدم (userHandle)#

userHandle هو user_id الفعلي. اقرأ المزيد عن user_id في القسم 4.1 مخطط قاعدة البيانات.

2.5 اختيار الموثق (authenticatorSelection)#

يسمح كائن authenticatorSelection للخادم بإملاء الإعدادات الخاصة بالموثق وإنشاء بيانات الاعتماد باستخدام القيم التالية:

2.4.1 ملحق الموثق (authenticatorAttachment)#

  • المنصة (Platform): الموثق متصل بمنصة العميل وبالتالي لا يمكن إزالته.
  • عبر المنصات (Cross-platform): الموثق غير مرتبط بمنصة العميل ويمكن استخدامه على أجهزة متعددة.

2.5.2 المفتاح المقيم (residentKey)#

  • مطلوب (Required): يجب أن ينشئ الموثق مفتاحًا مقيمًا (إذا لم يكن ذلك ممكنًا، يجب أن تفشل العملية).
  • مفضل (Preferred): يجب أن يحاول الموثق إنشاء مفتاح مقيم (إذا لم يكن ذلك ممكنًا، يجب أن ينشئ مفتاحًا غير مقيم).
  • مرفوض (Discouraged): يجب أن ينشئ الموثق مفتاحًا غير مقيم (إذا لم يكن ذلك ممكنًا، يجب أن تفشل العملية).

المفاتيح المقيمة (تُعرف أيضًا ببيانات الاعتماد القابلة للاكتشاف): يتم تخزين المفاتيح المقيمة على الموثق واسترجاعها أثناء المصادقة. بهذه الطريقة يمكن للعميل اكتشاف قائمة بالمفاتيح المحتملة، ولهذا السبب تتطلب [واجهة المستخدم الشرطية Conditional UI](/blog/user-transition-passkeys-> conditional-ui) مفاتيح مقيمة. المفاتيح غير المقيمة (تُعرف أيضًا ببيانات الاعتماد غير القابلة للاكتشاف): في حالة المفاتيح غير المقيمة، يتم تخزين معرف بيانات الاعتماد على الخادم وتوفيره أثناء المصادقة. يُعد معرف بيانات الاعتماد معرفًا مبهمًا يختلف هيكله الداخلي باختلاف التنفيذ - قد تخزن الموثقات المفاتيح الخاصة مباشرة، أو تستخدم تغليف المفاتيح المشفرة، أو تشتق المفاتيح من أسرار داخلية. تختلف الآلية الدقيقة باختلاف تنفيذ الموثق.

2.5.3 التحقق من المستخدم (userVerification)#

  • مطلوب (Required): يجب أن تتحقق العملية من المستخدم.
  • مفضل (Preferred): يجب أن تتحقق العملية من المستخدم، ولكن يمكن المتابعة بدونه (الخيار القياسي).
  • مرفوض (Discouraged): يجب ألا تتحقق العملية من المستخدم.

تحذير: إذا تم التعيين إلى "Preferred"، يمكن للمستخدم أو جهازه تخطي التحقق من المستخدم في عملية المصادقة (اقرأ المزيد في هذا المقال).

3. واجهة المستخدم الشرطية (Conditional UI)#

تعرض واجهة المستخدم الشرطية (الملء التلقائي لمفاتيح المرور) مفاتيح المرور المتاحة في قائمة اختيار منسدلة للمستخدم، عندما يكون لدى المستخدم مفتاح مقيم مسجل لدى الطرف المعتمد. إنه يحسن قابلية استخدام مفاتيح المرور، ولكنه يتطلب جهود تطوير إضافية ولا يتوفر لجميع مجموعات أنظمة التشغيل / المتصفحات.

3.1 تدفق تسجيل الدخول باستخدام واجهة المستخدم الشرطية#

مثل تسجيل الدخول العادي، تستخدم واجهة المستخدم الشرطية أيضًا الكائنات PublicKeyCredentialRequestOptions و assertion.

3.2 توافق الأجهزة#

واجهة المستخدم الشرطية غير متوفرة على جميع مجموعات أنظمة التشغيل والمتصفحات (حتى الآن). إليك نظرة عامة على تغطية المتصفح الحالية (مارس 2024):

للحصول على نظرة عامة محدثة، راجع هذا الموقع.

3.3 أمثلة برمجية#

3.3.1 طريقة واجهة المستخدم الشرطية#

يبدو الكود البرمجي المصغر الكامل لطريقة واجهة المستخدم الشرطية كالتالي:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Conditional UI</title> </head> <body> <input type="text" id="username" autocomplete="username webauthn" /> <script> async function passkeyLogin() { try { // استرداد خيارات الطلب (بما في ذلك التحدي) من خادم WebAuthn let options = await WebAuthnClient.getPublicKeyRequestOptions(); const credential = await navigator.credentials.get({ publicKey: options.publicKeyCredentialRequestOptions, mediation: "conditional", }); const userData = await WebAuthnClient.sendSignedChallenge(credential); window.location.href = "/logged-in"; } catch (error) { console.log(error); } } passkeyLogin(); </script> </body> </html>

3.3.2 التحقق من توافق المتصفح#

لا تعمل واجهة المستخدم الشرطية إلا مع المفاتيح المقيمة / بيانات الاعتماد القابلة للاكتشاف.
يُوصى بتوفير نقطة نهاية خادم مختلفة لبدء تسجيل الدخول عبر واجهة المستخدم الشرطية.
يجب أن يستوفي العميل متطلبات متعددة:

  • يجب أن يدعم المتصفح واجهة المستخدم الشرطية (راجع 3.2 توافق الأجهزة).
  • يجب تمكين JavaScript ويجب أن توفر صفحة الويب حقل إدخال HTML.
  • يجب تجاهل معلمات المهلة الزمنية (Timeout).

لتجنب الأخطاء، يجب أن يختبر الخادم أولاً توفر العميل بهذه الوظيفة: في حركة المرور الحقيقية، غالبًا ما تظهر مشكلات الاكتشاف ودورة الحياة على شكل NotAllowedError أو AbortError. استخدم دليل أخطاء WebAuthn هذا للتصنيف المتوقع مقابل غير المتوقع، بما في ذلك أخطاء مفتاح مرور مدير بيانات الاعتماد الأصلي.

// المصدر: https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredential/isConditionalMediationAvailable#examples // توفر `window.PublicKeyCredential` يعني أن WebAuthn قابل للاستخدام. if (window.PublicKeyCredential && PublicKeyCredential.isConditionalMediationAvailable) { // التحقق مما إذا كانت الوساطة الشرطية متاحة. const isCMA = await PublicKeyCredential.isConditionalMediationAvailable(); if (isCMA) { // استدعاء نقطة نهاية بدء مصادقة WebAuthn let options = await WebAuthnClient.getPublicKeyRequestOptions(); const credential = await navigator.credentials.get({ publicKey: options.publicKeyCredentialRequestOptions, mediation: "conditional", }); /* ... */ } }

3.3.3 رمز الإكمال التلقائي في حقول الإدخال#

يجب أن يتلقى حقل الإدخال رمز الملء التلقائي بتنسيق HTML، والذي يشير للعميل إلى ملء مفاتيح المرور للطلب الجاري. إلى جانب مفاتيح المرور، يمكن إقران رموز الملء التلقائي برموز موجودة، مثل أسماء المستخدمين وكلمات المرور:

  • autocomplete="username webauthn": بالإضافة إلى عرض مفاتيح المرور، يقترح هذا أيضًا الإكمال التلقائي لاسم المستخدم.
  • autocomplete="current-password webauthn": بالإضافة إلى عرض مفاتيح المرور، يطالب هذا أيضًا بالإكمال التلقائي لكلمة المرور.
<label for="name">Username:</label> <input type="text" name="name" autocomplete="username webauthn" /> <label for="password">Password:</label> <input type="password" name="password" autocomplete="current-password webauthn" />

4. خادم WebAuthn#

4.1 مخطط قاعدة البيانات#

لا يوجد مخطط قاعدة بيانات إلزامي أو قياسي لخوادم WebAuthn. ومع ذلك، يمكن استخدام مخطط قاعدة البيانات النموذجي هذا لتخزين المعلومات المطلوبة وتوفير جميع وظائف خادم WebAuthn:

السمات الغامقة إلزامية لتنفيذ أساسي قابل للتطبيق، في حين أن السمات الأخرى مطلوبة فقط للميزات الاختيارية ولكن المفيدة.

4.1.1 البيانات المتعلقة بالمصادقة#

  • معرف بيانات الاعتماد (Credential ID): هذا معرف فريد يتم إنشاؤه بواسطة الموثق أثناء تسجيل مفتاح المرور. يجب استخدامه للبحث عن حساب المستخدم الفعلي المرتبط بمفتاح المرور. بالإضافة إلى ذلك، يجب بعد ذلك مقارنة userHandle (من user_id) للتحقق من الحساب المستخدم للمصادقة. لا تستخدم سمة user.name للمقارنة لأنها يمكن أن تتغير بمرور الوقت.
  • معرف المستخدم (user_id): معرف فريد يحدده الطرف المعتمد لتمثيل حساب مستخدم في نظامه. يتم إرجاعه كـ userHandle داخل كائن التأكيد.

4.1.2 البيانات الوصفية لعرض واختيار مفاتيح المرور:#

  • الاسم المعروض للمستخدم (user.displayName): اسم مقروء وسهل الاستخدام، وهو عادةً الاسم الكامل للمستخدم. يظهر للمستخدم، لكنه لا يُستخدم أثناء المصادقة.

  • اسم المستخدم (user.name): اسم فريد ومقروء وعادة ما يكون عنوان بريد إلكتروني أو اسم مستخدم. يمكن إظهاره للمستخدم، ولكنه لا يُستخدم أثناء المصادقة.

4.2 معرف الطرف المعتمد (rpId)#

يعد معرف الطرف المعتمد (rpID) نطاقًا مخزنًا داخل مفتاح المرور، مما يضمن أن مفتاح المرور يعمل فقط مع النطاق الصحيح (عنوان URL للمتصفح، راجع هذا المقال للحصول على التطبيقات الأصلية). أثناء المصادقة، يتم التحقق من rpID مقابل عنوان URL للمتصفح ولا يُسمح به إلا في هاتين الحالتين:

  1. يتطابق عنوان URL تمامًا مع rpId أو
  2. يكون عنوان URL نطاقًا فرعيًا يتطابق مع rpId ولا يكون النطاق الأصلي مدرجًا في قائمة اللاحقات العامة (Public Suffix List).

إليك أمثلة على المجموعات (غير) المسموح بها:

5. مواقع وأدوات مفيدة#

إليك قائمة بالأدوات والمواقع المفيدة لتنفيذ مفاتيح المرور.

للحصول على استراتيجيات حول تحسين تجربة مستخدم مفاتيح المرور بما يتجاوز التنفيذ الفني، راجع أدلتنا حول أفضل ممارسات إنشاء مفتاح المرور وأفضل ممارسات تسجيل الدخول بمفتاح المرور.

إذا كنت ترغب في تنفيذ مفاتيح المرور باستخدام بضعة أسطر فقط من التعليمات البرمجية في أي تطبيق، فيمكنك أيضًا استخدام Corbado Complete (للتطبيقات الجديدة) أو Corbado Connect (للتطبيقات الحالية).

Corbado

حول Corbado

Corbado هي Authentication Intelligence Platform لفِرَق CIAM التي تُدير المصادقة الاستهلاكية على نطاق واسع. نُمكّنك من رؤية ما لا تستطيع سجلات IDP وأدوات التحليل العامة إظهاره: أي الأجهزة وإصدارات أنظمة التشغيل والمتصفحات ومديري بيانات الاعتماد تدعم passkeys، ولماذا لا تتحوّل عمليات التسجيل إلى عمليات دخول، وأين يفشل تدفق WebAuthn، ومتى يُعطّل تحديث نظام التشغيل أو المتصفح تسجيل الدخول بصمت — كل ذلك دون استبدال Okta أو Auth0 أو Ping أو Cognito أو IDP الداخلي لديك. منتجان: Corbado Observe يُضيف observability للـ passkeys وأي طريقة دخول أخرى. Corbado Connect يُقدّم managed passkeys مع تحليلات مدمجة (إلى جانب IDP الخاص بك). تُشغّل VicRoads passkeys لأكثر من 5 ملايين مستخدم مع Corbado (تفعيل passkey بنسبة +80%). تحدث مع خبير Passkey

الأسئلة الشائعة#

كيف يمكنني تنفيذ واجهة المستخدم الشرطية للملء التلقائي لمفاتيح المرور في تطبيق الويب الخاص بي؟#

تتطلب واجهة المستخدم الشرطية التحقق من دعم المتصفح عبر PublicKeyCredential.isConditionalMediationAvailable() قبل بدء المصادقة. يجب أن يتضمن حقل الإدخال رمز HTML autocomplete="username webauthn" ويجب أن يكون لدى المستخدم مفتاح مقيم (بيانات اعتماد قابلة للاكتشاف) مسجل. يوصى بوجود نقطة نهاية خادم منفصلة للتعامل مع تدفق تسجيل الدخول الخاص بواجهة المستخدم الشرطية.

ما هو الحد الأدنى من البيانات التي أحتاج إلى تخزينها في قاعدة البيانات الخاصة بي لدعم مصادقة WebAuthn؟#

كحد أدنى، قم بتخزين معرف بيانات الاعتماد (Credential ID)، الذي يتم إنشاؤه بواسطة الموثق أثناء التسجيل، ومعرف المستخدم (user_id)، والذي يتم إرجاعه كـ userHandle في كائن التأكيد. استخدم معرف بيانات الاعتماد للبحث عن حساب المستخدم المرتبط ومقارنة userHandle للتحقق من صحة المصادقة. تجنب استخدام user.name للمقارنة لأنه يمكن أن يتغير بمرور الوقت.

ما هو الفرق بين المفاتيح المقيمة والمفاتيح غير المقيمة في WebAuthn؟#

يتم تخزين المفاتيح المقيمة (بيانات الاعتماد القابلة للاكتشاف) على الموثق نفسه ويتم استردادها أثناء المصادقة، وهو أمر مطلوب لعمل واجهة المستخدم الشرطية. تخزن المفاتيح غير المقيمة معرف بيانات الاعتماد على الخادم وترسله إلى الموثق أثناء المصادقة. يتحكم حقل residentKey في authenticatorSelection في هذا السلوك بقيم "required" أو "preferred" أو "discouraged".

كيف يعمل userVerification وما هي مخاطر تعيينه إلى preferred؟#

يتحكم حقل userVerification في ما إذا كان يجب على الموثق التحقق من المستخدم أثناء تسجيل الدخول، مع قبول القيم "required" أو "preferred" (الافتراضي) أو "discouraged". عند تعيينه على "preferred"، يمكن للمستخدم أو جهازه تخطي التحقق بالكامل أثناء عملية المصادقة، مما قد يضعف الأمان. يضمن تعيينه على "required" حدوث التحقق دائمًا قبل اكتمال المصادقة.

اكتشف كيف يناسب Corbado خطة طرح passkeys وبنية المصادقة الحالية لديك.

استكشف Console

شارك هذا المقال


LinkedInTwitterFacebook