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

9 مكتبات خوادم لتنفيذ WebAuthn: مقارنة شاملة

يساعدك هذا المقال في العثور على مكتبة خادم WebAuthn المناسبة لدعم مفاتيح المرور. نقارن هنا 9 مكتبات ونقدم استراتيجية لاختيار المكتبة الأفضل.

Blog-Post-Author
Nicolai

تاريخ الإنشاء: 15 ديسمبر 2023

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

9 مكتبات خوادم لتنفيذ WebAuthn: مقارنة شاملة

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

PasskeysCheatsheet Icon

ملخص Passkeys. إرشادات عملية وأنماط إطلاق ومؤشرات KPI لبرامج passkeys.

احصل على الملخص
حقائق أساسية
  • تعتبر مكتبة SimpleWebAuthn (مكتوبة بلغة TypeScript، وحاصلة على 1,000 نجمة على GitHub) الأكثر بديهية وتوفر بشكل فريد كلاً من مكتبة خادم ومكتبة متصفح للواجهة الأمامية لتنفيذ مفاتيح المرور.
  • تتطلب المصادقة باستخدام مفاتيح المرور ما لا يقل عن أربع نقاط نهاية (API endpoints) في الواجهة الخلفية مقارنة بنقطة نهاية واحدة للمصادقة بكلمة المرور، مما يجعل استخدام مكتبة خادم WebAuthn أمراً أساسياً للتعامل مع التعقيد التشفيري.
  • تعد مكتبة py_webauthn (مكتوبة بلغة Python) مثالية للاختبار السريع: حيث يتم إنشاء خيارات المصادقة من خلال استدعاء طريقة (method) واحدة ولا تتطلب أي تكوين لإطار العمل.
  • توفر مكتبة webauthn-framework (مكتوبة بلغة PHP/Symfony، وحاصلة على 347 نجمة) التوثيق المفاهيمي الأكثر شمولاً، مما يجعلها الأفضل للمطورين الذين يتعلمون أساسيات مفاتيح المرور من الصفر.
  • عندما لا تتطابق أي مكتبة مع لغتك البرمجية، يوصى باستخدام go-webauthn أو SimpleWebAuthn كبدائل نظراً لاعتمادها الواسع عبر المشاريع التجارية ومفتوحة المصدر.

1. مقدمة: تنفيذ خادم WebAuthn#

يعد توفير مصادقة مستخدم بسيطة وآمنة أمراً ضرورياً للشركات الرقمية في عام 2024. وتعتبر مفاتيح المرور، بصفتها المعيار الجديد لتسجيل الدخول، الحل المثالي لتلبية هذه الاحتياجات. ومع ذلك، فإن تجربة المستخدم المحسنة والأمان الذي توفره مفاتيح المرور للمستخدم يأتي بتكلفة عند تنفيذها من قبل المطورين. تنبع صعوبة التنفيذ من حقيقة أن مفاتيح المرور تعتبر جديدة نسبياً - للمستخدمين وكذلك للمطورين - وأن تنفيذها يمكن أن يكون صعباً للغاية مقارنة بالمصادقة القائمة على كلمات المرور. في الواقع، تحتاج إلى ما لا يقل عن أربع نقاط نهاية لواجهة برمجة التطبيقات (API) لمصادقة مفتاح المرور مقارنة بنقطة نهاية واحدة لمصادقة كلمة المرور.

يعد خادم WebAuthn (جزء المكتبة الأخضر) أحد المكونات الأساسية على جانب الخادم لتوفير المصادقة باستخدام مفاتيح المرور. للحصول على دليل شامل حول كيفية دمج خادم WebAuthn في نطاق تكامل المؤسسات الأوسع، راجع مقالنا المخصص.

المصدر: Yubico

في منشور المدونة هذا، نقوم بمقارنة العديد من مكتبات / حزم / حزم أدوات تطوير البرمجيات لخادم WebAuthn، ونحلل الاختلافات ونقدم توصية للمطورين الجدد في مجال تنفيذ مفاتيح المرور.

2. كيف يمكنني تنفيذ مفاتيح المرور بنفسي؟#

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

  1. استخدام حل مفتاح مرور تابع لجهة خارجية (مثل Corbado)
  2. تنفيذ مفاتيح المرور بنفسك باستخدام إحدى مكتبات خادم WebAuthn الموضحة أدناه

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

Demo Icon

جرّب passkeys في عرض مباشر.

جرّب passkeys

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

  1. تبدأ الواجهة الأمامية (المتصفح) بطلب إنشاء حساب أو تسجيل دخول وتستدعي نقطة نهاية API للواجهة الخلفية.
  2. تُنشئ الواجهة الخلفية معلمات تسجيل الدخول أو إنشاء الحساب الخاصة بـ WebAuthn. وتسمى هذه PublicKeyCredentialCreationOptions و PublicKeyCredentialRequestOptions على التوالي. أحد أهم أجزاء معلمات WebAuthn هذه هو التحدي (challenge). ثم يتم إرسال معلمات WebAuthn مرة أخرى إلى الواجهة الأمامية.
  3. تتلقى الواجهة الأمامية معلمات WebAuthn هذه وتستخدمها للتحقق من هوية المستخدم باستخدام نظام مصادقة الجهاز المحلي (على سبيل المثال، عبر Face ID، Touch ID، Windows Hello). في عمليات إنشاء الحساب، يتم إنشاء زوج جديد من المفاتيح العامة والخاصة، ويتم تخزين المفتاح الخاص محلياً، بينما يتم إرسال المفتاح العام إلى الخادم. في عمليات تسجيل الدخول، يتم توقيع التحدي باستخدام المفتاح الخاص لمفتاح المرور وإرساله إلى نقطة نهاية API أخرى في الواجهة الخلفية.
  4. في عمليات إنشاء الحساب، تتلقى الواجهة الخلفية المفتاح العام وتقوم بتخزينه. في عمليات تسجيل الدخول، تتلقى الواجهة الخلفية التحدي الموقع وتتحقق من سلامته باستخدام خادم WebAuthn.

نظراً لأن كل عملية تسجيل / تسجيل دخول تتضمن هذه الخطوات، تحتاج الواجهة الخلفية إلى تتبع المستخدمين ومفاتيح المرور وطلبات التسجيل / تسجيل الدخول.

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

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

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

  • إدارة الأجهزة
  • تدفقات تسجيل الدخول عبر المنصات والأجهزة المختلفة
  • إدارة المستخدمين
  • إدارة الجلسات
  • اكتشاف الأجهزة الجاهزة لاستخدام مفاتيح المرور
  • تثقيف المستخدمين
  • خيارات المصادقة البديلة
  • آليات الاسترداد
  • خيارات مشاركة الحساب
  • تدفقات إنشاء مفتاح مرور محسنة وتدفقات تسجيل دخول مفتاح المرور لزيادة معدل الاعتماد

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

Slack Icon

انضم إلى مجتمع Passkeys للحصول على التحديثات والدعم.

انضم

3. مكتبات الواجهة الخلفية لخوادم WebAuthn: مقارنة#

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

  • معايير اختيار المصادق (Authenticator Selection Criteria): كيف يمكنك تعيين تفضيلات لسلوك معين وميزات أمان (مثل فرض إنشاء مفاتيح مقيمة)؟
  • الإعدادات العامة: إلى أي مدى يمكنك مركزة التكوين المطلوب؟
  • التوثيق: ما مدى جودة توثيق مكتبة خادم WebAuthn وسهولة متابعتها
  • الأمثلة: هل توجد أي تطبيقات نموذجية يمكنك الرجوع إليها.

تم تحليل مكتبات خوادم WebAuthn التالية (مرتبة تنازلياً حسب عدد النجوم على GitHub في ديسمبر 2023):

StateOfPasskeys Icon

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

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

3.1 TypeScript: SimpleWebAuthn#

  • لغة البرمجة: Typescript
  • إطار العمل: Node.js
  • المؤلف: Matthew Miller (Duo Security / Cisco)
  • النجوم: 1000
  • مستخدمة من قبل: 781
  • المساهمون: 19
  • التوافق مع FIDO: نعم
  • الإعدادات العامة: لا
  • معايير اختيار المصادق: كما اقترحت W3C (يجب أن تحتوي على متغيرات authenticatorAttachment، residentKey، requireResidentKey و userVerification والتي تم شرحها على صفحة W3C أيضاً)
  • التوثيق: منظم بشكل جيد مع التركيز على الإعداد السريع وسهولة الاستخدام، يتضمن معرفة بمفاتيح المرور، مثلاً يشرح ماهية مفاتيح المرور وكيف تعمل
  • الأمثلة: يتوفر مشروع تجريبي في الوثائق
  • هياكل البيانات الموصى بها:
type UserModel = { id: string; username: string; currentChallenge?: string; }; /** * It is strongly advised that authenticators get their own DB * table, ideally with a foreign key to a specific UserModel. * * "SQL" tags below are suggestions for column data types and * how best to store data received during registration for use * in subsequent authentications. */ type Authenticator = { // SQL: Encode to base64url then store as `TEXT`. Index this column credentialID: Uint8Array; // SQL: Store raw bytes as `BYTEA`/`BLOB`/etc... credentialPublicKey: Uint8Array; // SQL: Consider `BIGINT` since some authenticators return atomic timestamps as counters counter: number; // SQL: `VARCHAR(32)` or similar, longest possible value is currently 12 characters // Ex: 'singleDevice' | 'multiDevice' credentialDeviceType: CredentialDeviceType; // SQL: `BOOL` or whatever similar type is supported credentialBackedUp: boolean; // SQL: `VARCHAR(255)` and store string array as a CSV string // Ex: ['usb' | 'ble' | 'nfc' | 'internal'] transports?: AuthenticatorTransport[]; };
  • خصائص أخرى: توفر أداة WebAuthn Debugger for WebAuthn responses رائعة ولا تقدم فقط مكتبة للواجهة الخلفية / الخادم بل أيضاً مكتبة للواجهة الأمامية (تقوم أساساً بتغليف بعض واجهات برمجة تطبيقات Web Authentication من العميل)
  • التقييم الشخصي: الإعداد الأكثر بديهية الذي رأيناه حتى الآن وهو مباشر للغاية. علاوة على ذلك، فهي واحدة من المكتبات القليلة التي تقدم أيضاً مكتبة للمتصفح للمساعدة في تطبيقات العميل مما يجعلها مميزة للغاية. مؤلف المكتبة نشط بشكل كبير في مجتمع WebAuthn / مفاتيح المرور.
  • رابط GitHub: https://github.com/MasterKale/SimpleWebAuthn

3.2 .NET: fido2-net-lib#

  • لغة البرمجة: C#
  • إطار العمل: .NET
  • المؤلفون: Anders Åberg، Alex Seigler
  • النجوم: 962
  • مستخدمة من قبل: 200
  • المساهمون: 40
  • التوافق مع FIDO: نعم
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: كما اقترحت W3C
  • التوثيق: فقط ملف Readme مع بضعة أمثلة، وبعض معلومات مفاتيح المرور الاستخباراتية على موقع المكتبة
  • الأمثلة: وحدة تحكم تجريبية ومخزن بيانات اعتماد توضيحي متاح لإظهار تكامل نموذجي
  • هيكل البيانات الموصى به:
public class StoredCredential { /// <summary> /// The Credential ID of the public key credential source. /// </summary> public byte[] Id { get; set; } /// <summary> /// The credential public key of the public key credential source. /// </summary> public byte[] PublicKey { get; set; } /// <summary> /// The latest value of the signature counter in the authenticator data from any ceremony using the public key credential source. /// </summary> public uint SignCount { get; set; } /// <summary> /// The value returned from getTransports() when the public key credential source was registered. /// </summary> public AuthenticatorTransport[] Transports { get; set; } /// <summary> /// The value of the BE flag when the public key credential source was created. /// </summary> public bool IsBackupEligible { get; set; } /// <summary> /// The latest value of the BS flag in the authenticator data from any ceremony using the public key credential source. /// </summary> public bool IsBackedUp { get; set; } /// <summary> /// The value of the attestationObject attribute when the public key credential source was registered. /// Storing this enables the Relying Party to reference the credent’al's attestation statement at a later time. /// </summary> public byte[] AttestationObject { get; set; } /// <summary> /// The value of the clientDataJSON attribute when the public key credential source was registered. /// Storing this in combination with the above attestationObject item enables the Relying Party to re-verify the attestation signature at a later time. /// </summary> public byte[] AttestationClientDataJson { get; set; } public List<byte[]> DevicePublicKeys { get; set; } public byte[] UserId { get; set; } public PublicKeyCredentialDescriptor Descriptor { get; set; } public byte[] UserHandle { get; set; } public string AttestationFormat { get; set; } public DateTimeOffset RegDate { get; set; } public Guid AaGuid { get; set; } }
  • خصائص أخرى: مستخدمة من قبل Bitwarden (تم الاستحواذ على الشركة الناشئة passwordless.dev بواسطة Bitwarden)
  • التقييم الشخصي: مكتبة ملائمة للمطورين مع كمية جيدة من المواد التكميلية
  • رابط GitHub: https://github.com/passwordless-lib/fido2-net-lib

3.3 Python: py_webauthn#

  • لغة البرمجة: Python
  • إطار العمل: لا يوجد إطار محدد
  • المؤلف: Duo Labs
  • النجوم: 727
  • مستخدمة من قبل: 912
  • المساهمون: 23
  • التوافق مع FIDO: غير متوفر
  • الإعدادات العامة: لا
  • معايير اختيار المصادق: كما اقترحت W3C
  • التوثيق: قليل إلى معدوم، يشترط معرفة مسبقة بمفاتيح المرور
  • الأمثلة: تتوفر عينات كود صغيرة للتسجيل وتسجيل الدخول
  • هيكل البيانات الموصى به: غير متوفر
  • خصائص أخرى: يتطلب Python >= 3.8
  • التقييم الشخصي: مكتبة مضغوطة نسبياً مع عدد قليل من الملفات، يمكنك الحصول على نظرة عامة في وقت قصير.
  • رابط GitHub: https://github.com/duo-labs/py_webauthn

3.4 Ruby: webauthn-ruby#

  • لغة البرمجة: Ruby
  • إطار العمل: Ruby on Rails
  • المؤلف: Cedarcode
  • النجوم: 580
  • مستخدمة من قبل: 679
  • تنزيلات الحزمة: 18 مليون
  • المساهمون: 27
  • التوافق مع FIDO: نعم
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: كما اقترحت W3C
  • التوثيق: ملف Readme هو المصدر الوحيد للتوثيق
  • الأمثلة: غير متوفر
  • هيكل البيانات الموصى به: غير متوفر
  • خصائص أخرى: تتوفر أيضاً أغلفة (wrappers) لهذه المكتبة (warden-webauthn، devise-passkeys)
  • التقييم الشخصي: نظراً لأن المواد التكميلية محدودة جداً، نوصي بهذه المكتبة فقط إذا كنت على دراية بكل من Ruby ومفاتيح المرور
  • رابط GitHub: https://github.com/cedarcode/webauthn-ruby

3.5 Go: go-webauthn#

  • لغة البرمجة: Go
  • إطار العمل: أطر العمل القائمة على Go مثل Gin، Echo، ¦
  • المؤلف: في الأصل من Duo Labs / استمر بواسطة James Elliott
  • النجوم: 480
  • مستخدمة من قبل: 280
  • المساهمون: 18
  • التوافق مع FIDO: نعم
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: كما اقترحت W3C
  • التوثيق: ملف Readme مع بعض العينات هو المصدر الوحيد للتوثيق
  • الأمثلة: مستودع أمثلة متاح
  • هيكل البيانات الموصى به: غير متوفر
  • خصائص أخرى: عدد كبير من الملفات، يستغرق الحصول على نظرة عامة بعض الوقت
  • التقييم الشخصي: مكتبة شائعة سهلة الاستخدام بمجرد التعود عليها، ومع ذلك نوصي بتعلم بعض المعرفة حول مفاتيح المرور (كيف تعمل، كيف تبدو الإجراءات، وما إلى ذلك) مسبقاً.
  • رابط GitHub: https://github.com/go-webauthn/webauthn

3.6 Java: java-webauthn-server#

  • لغة البرمجة: Java
  • إطار العمل: Maven / Gradle
  • المؤلف: Yubico
  • النجوم: 391
  • مستخدمة من قبل: غير متوفر
  • المساهمون: 27
  • التوافق مع FIDO: غير متوفر
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: كما اقترحت W3C.
  • التوثيق: ملف Readme هو التوثيق الوحيد، لكنه مفصل نوعاً ما
  • الأمثلة: غير متوفر
  • هيكل البيانات الموصى به: غير متوفر
  • خصائص أخرى: تأتي مع واجهة مستودع بيانات الاعتماد (Credential Repository interface)، مما يوفر إرشادات واضحة حول طرق استرجاع قاعدة البيانات المطلوبة.
  • التقييم الشخصي: على الرغم من أنه يجب عليك إدارة قاعدة البيانات بنفسك، إلا أن مستودع بيانات الاعتماد يساعد بشكل كبير في عملية تصميم قاعدة البيانات. بطبيعة الحال، تأتي تطبيقات Java بعدد كبير من الملفات حيث تحتاج كل سمة إلى فئة يتم تخزينها عادةً في ملفها الخاص. هذا يجعل الحصول على نظرة عامة مهمة تستهلك وقتاً أطول.
  • رابط GitHub: https://github.com/Yubico/java-webauthn-server

3.7 Rust: webauthn-rs#

  • لغة البرمجة: Rust
  • إطار العمل: قائم على Rust (مثل Rocket، Axum، ¦)
  • المؤلف: مشروع Kanidm لإدارة الهوية
  • النجوم: 351
  • مستخدمة من قبل: 617
  • المساهمون: 25
  • التوافق مع FIDO: غير متوفر
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: إمكانيات تكوين محدودة للغاية. يتم تنفيذ المكتبات الأخرى وفقاً لمعيار W3C تماماً، مما يظهر قابلية تكوين أكبر
  • التوثيق: يتوفر توثيق تقني تم إنشاؤه تلقائياً، ولكنه ليس مفصلاً جداً
  • الأمثلة: مستودع تعليمي مع أمثلة لـ 3 أطر عمل ويب مختلفة متاح
  • هيكل البيانات الموصى به: غير متوفر
  • خصائص أخرى: اجتازت المكتبة تدقيقاً أمنياً أجرته وحدة أمن منتجات SUSE.
  • التقييم الشخصي: نظراً لمحدودية التكوين والوثائق، نوصي بهذه المكتبة فقط إذا كان إطار عملك الأساسي يعتمد على Rust وكنت تعرف كيف تعمل مفاتيح المرور
  • رابط GitHub: https://github.com/kanidm/webauthn-rs

3.8 PHP: webauthn-framework#

  • لغة البرمجة: PHP
  • إطار العمل: Symfony
  • المؤلف: Florent Morselli
  • النجوم: 347
  • مستخدمة من قبل: غير متوفر
  • المساهمون: 18
  • التوافق مع FIDO: نعم
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: كما اقترحت W3C.
  • التوثيق: توثيق شامل يتضمن تفاصيل تقنية، ولكنه يشرح أيضاً مفاتيح المرور من الصفر
  • الأمثلة: مستودع أمثلة متاح
  • هيكل البيانات الموصى به:
<?php declare(strict_types=1); namespace App\Entity; use App\Repository\PublicKeyCredentialSourceRepository; use DateTimeImmutable; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Uid\AbstractUid; use Symfony\Component\Uid\Uuid; use Webauthn\PublicKeyCredentialSource as BasePublicKeyCredentialSource; use Webauthn\TrustPath\TrustPath; #[ORM\Table(name: 'pk_credential_sources')] #[ORM\Entity(repositoryClass: PublicKeyCredentialSourceRepository::class)] class PublicKeyCredentialSource extends BasePublicKeyCredentialSource { #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] public readonly DateTimeImmutable $createdAt; #[ORM\Id] #[ORM\Column(type: Types::STRING, length: 255)] #[ORM\GeneratedValue(strategy: 'NONE')] private string $id; public function __construct( string $publicKeyCredentialId, string $type, array $transports, string $attestationType, TrustPath $trustPath, AbstractUid $aaguid, string $credentialPublicKey, string $userHandle, int $counter ) { $this->id = Uuid::v4()->toRfc4122(); $this->createdAt = new DateTimeImmutable(); parent::__construct($publicKeyCredentialId, $type, $transports, $attestationType, $trustPath, $aaguid, $credentialPublicKey, $userHandle, $counter); } public function getId(): string { return $this->id; } }
  • خصائص أخرى: غير متوفر
  • التقييم الشخصي: جيد للأشخاص الذين يرغبون في الدخول إلى عالم مفاتيح المرور، ولكن ليس لديهم معرفة سابقة
  • رابط GitHub: https://github.com/web-auth/webauthn-framework

3.9 Java: webauthn4j#

  • لغة البرمجة: Java
  • إطار العمل: Maven
  • المؤلف: WebAuthn4j
  • النجوم: 342
  • مستخدمة من قبل: غير متوفر
  • المساهمون: 19
  • التوافق مع FIDO: نعم
  • الإعدادات العامة: نعم
  • معايير اختيار المصادق: بدلاً من معلمة UserVerificationRequirement المقترحة من W3C بالقيم discouraged و preferred و required، تقدم webauthn4j verificationRequired و userPrecenseRequired كمتغيرات منطقية (Boolean)
  • التوثيق: توثيق جاف ولكنه شامل، وتتوفر بعض عينات التعليمات البرمجية
  • الأمثلة: مستودع أمثلة متاح
  • هيكل البيانات الموصى به: غير متوفر
  • خصائص أخرى: غير متوفر
  • التقييم الشخصي: قراءة الوثائق تصبح مملة ومعقدة بسرعة، حيث إنها مجرد صفحة واحدة كبيرة تركز فقط على الوظائف، وليس على المفهوم وراء مفاتيح المرور.
  • رابط GitHub: https://github.com/webauthn4j/webauthn4j

يوفر الجدول التالي نظرة عامة على مكتبات خوادم WebAuthn:

Substack Icon

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

اشترك

4. التوصيات: التنقل في مشهد مكتبات WebAuthn#

4.1 الخطوة 1: اختر مكتبة WebAuthn الخاصة بك#

نظراً لأن معظم المكتبات قوية بنفس القدر وتنفذ معيار WebAuthn، نوصي بشجرة القرار التالية:

  • مكتبة خادم WebAuthn في إطار عملك ولغتك البرمجية متاحة: لم ندرج مكتبات إطار العمل التي تعتمد على إحدى المكتبات المذكورة أعلاه (على سبيل المثال، هناك تخصيصات لـ PHP متاحة لـ Symfony و Laravel). في حال وجود تنفيذ لإطار العمل، اختره لأنه يسمح لك بدمج استدعاءات WebAuthn API محلياً في هيكل إطار عملك الحالي واستخدام تجريد قاعدة البيانات الخاص بك لتنفيذ التخزين.
  • مكتبة خادم WebAuthn بلغة البرمجة الخاصة بك متاحة: نظراً لأنك تحتاج إلى نقاط نهاية API للواجهة الخلفية، اختر مكتبة خادم WebAuthn بلغة البرمجة الأصلية الخاصة بك حتى يمكن تضمينها محلياً في نقاط نهاية API الحالية الخاصة بك.
  • لا تتوفر مكتبة خادم WebAuthn بلغة البرمجة الخاصة بك: في هذه الحالة، يجب أن تفكر في استخدام حل مدار لمفتاح المرور مثل Corbado. وإذا لم يكن ذلك خياراً، فإننا نوصي باستخدام go-webauthn أو SimpleWebAuthn حيث إن لديهما أكبر نسبة اعتماد، وهما خفيفا الوزن ويستخدمان أيضاً من قبل العديد من المشاريع التجارية ومفتوحة المصدر.

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

  • للاختبار السريع: توفر حزمة py_webauthn تنفيذاً فورياً مع مقتطفات برمجية جاهزة للاستخدام. من خلال استدعاء طريقة (method) واحدة فقط، يمكنك إنشاء الخيارات التي تحتاجها للمصادقة. ونظراً لأنك لا تحتاج إلى تضمين المكتبة في إطار عمل وتكوينها، فهي مثالية للاختبار السريع.
  • للتنفيذ البديهي: تعتبر حزمة SimpleWebauthn المكتوبة بلغة Typescript مباشرة وملائمة للمطورين. وكما هو الحال مع py_webauthn، فإن التنفيذ مبسط للغاية، ولكنه يأتي بالإضافة إلى ذلك مع وثائق ترشدك خلال عملية المصادقة. ومع ذلك، على عكس py_webauthn، لا تأتي SimpleWebAuthn مع مثال واضح يعمل بدون تعديل.
  • للفهم العميق: تبرز مكتبة webauthn-framework الخاصة بـ PHP بتوثيق شامل ومنظم يركز على مفاهيم مفتاح المرور. وتكمن الاختلافات الرئيسية مقارنة بالمكتبات الأخرى ذات القدر الجيد من التوثيق مثل webauthn4j في تصميم الوثائق وحيويتها.

للحصول على فهم أعمق حول كيفية عمل WebAuthn على جانب الخادم، يمكنك قراءة القسم التفصيلي جداً WebAuthn Relying Party Operations في وثيقة معايير WebAuthn RFC والذي يوضح بالتفصيل كل خطوة يجب تنفيذها من أجل تسجيل بيانات اعتماد جديدة (7.1) و التحقق من تأكيد المصادقة (7.2).

4.2 الخطوة 2: تحديد خيارات خادم WebAuthn الخاص بك#

قم بتقييم المتطلبات الخاصة بمفتاح المرور و WebAuthn التي لديك. في هذا المقال، افترضنا أنك ترغب فقط في دعم مفاتيح المرور كبيانات اعتماد قابلة للاكتشاف. اقرأ حول PublicKeyCredentialCreationOptions و PublicKeyCredentialRequestOptions جنباً إلى جنب مع استدعاءات WebAuthn API لجانب العميل navigator.credentials.create() و navigator.credentials.get() لضبط المعلمات في تكوين SDK لخادم WebAuthn بشكل صحيح لحالة الاستخدام الخاصة بك.

4.3 الخطوة 3: تحديد هيكل قاعدة البيانات#

بالنسبة لجميع مكتبات خوادم WebAuthn، ستحتاج إلى توفير هيكل قاعدة البيانات المناسب لحفظ / الوصول إلى المعلومات التالية:

  • بيانات الاعتماد
  • المستخدمون
  • التحديات (Challenges)
  • المصادقون (Authenticators)

بالنسبة لبعض المكتبات، هناك توصيات وأمثلة محددة (إذا وجدناها مفيدة، فقد قدمناها أعلاه). من الضروري أن تفهم تماماً حقول WebAuthn التي يجب تخزينها وأين. انتبه بشكل خاص لتحديد القيمة التي تريد استخدامها كمعرف للمستخدم (user.id). لدينا شرح أكثر تفصيلاً هنا. ضع في اعتبارك أيضاً ما يحدث عندما يقوم المستخدم بحذف مفتاح مرور. إلى جانب ذلك، يمكنك اختيارياً تقييد استخدام مصادقين معينين. يمكن العثور على قائمة بالمصادقين الصالحين المتعلقين بمفاتيح المرور هنا. وفي حال كنت ترغب أيضاً في دعم والتحقق من مصادقات (attestations) مفاتيح الأمان، فهذه قصة مختلفة تماماً. يمكنك العثور على مزيد من المعلومات هنا.

4.4 الخطوة 4: الاختبار على أجهزة المستخدمين#

حدد الأجهزة التي سيستخدم عليها المستخدمون مفاتيح المرور وطرق المصادقة البديلة. إذا لم تكن متأكداً من الأجهزة والمتصفحات وأنظمة التشغيل التي يستخدمها المستخدمون، فتحقق من State of Passkeys للحصول على أحدث البيانات حول جاهزية مفاتيح المرور عبر المنصات والمتصفحات وأنظمة التشغيل. إذا كانت لديك أسئلة محددة حول اعتماد مفتاح المرور وحصة جاهزية مفاتيح المرور لأجهزة معينة، فلا تتردد في التواصل معنا. يسعدنا تزويدك بمزيد من الرؤى ومساعدتك في هذا الموضوع (راجع أيضاً أحدث منشور مدونة لدينا بخصوص جاهزية مفتاح المرور). من منظور القابلية للملاحظة، احتفظ بفشل WebAuthn على جانب العميل ورفض التحقق من الخادم كمسارات منفصلة؛ لتعريفات الفئات على جانب العميل، استخدم أخطاء WebAuthn. علاوة على ذلك، يجب أن تضع في اعتبارك أنه بالنسبة لـ Windows 10 و Linux، ستحتاج إلى ابتكار حلول مخصصة لأن نظامي التشغيل هذين يوفران أقل قدر من دعم مفاتيح المرور (إن وجد).

StateOfPasskeys Icon

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

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

5. الخلاصة#

يوجد الآن مكتبة خادم WebAuthn راسخة تقريباً لكل لغة أو إطار عمل. وتظهر مقارنة مكتبات اللغات المختلفة عدم وجود تفوق واضح لتطبيقات معينة. بدلاً من ذلك، يجب عليك استخدام إطار العمل / لغة البرمجة التي أنت على دراية بها أكثر. وبدلاً من ذلك، إذا كنت لا ترغب في تنفيذ WebAuthn بنفسك والاعتناء بكل الأشياء المصاحبة له، فيمكنك تجربة حل مخصص مبني مسبقاً لمصادقة مفتاح المرور مثل Corbado. كونه حلاً شاملاً للمصادقة يتمحور حول مفتاح المرور، فإنه يأتي مع معلومات استخباراتية رائعة حول مفاتيح المرور، وإدارة جلسات بالإضافة إلى طرق مصادقة بديلة، حتى تتمكن من التركيز على تطوير منتجك والتخلي عن عبء المصادقة. يمكنك تجربته مجاناً لعدد غير محدود من المستخدمين هنا.

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

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

كيف أختار مكتبة خادم WebAuthn المناسبة لمشروعي؟#

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

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

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

لماذا لا يمكنني فقط تنفيذ التحقق من جانب الخادم لـ WebAuthn من الصفر بدون مكتبة؟#

تتعامل مكتبات خادم WebAuthn مع العمليات التشفيرية الأكثر تعقيداً: إنشاء معلمات PublicKeyCredentialCreationOptions و PublicKeyCredentialRequestOptions والتحقق من التحديات الموقعة. القيام بذلك بشكل صحيح من الصفر أصعب بكثير من استخدام مكتبة متوافقة مع FIDO والتي تم اختبارها وتدقيقها بالفعل.

ما هي أنظمة التشغيل التي لديها أضعف دعم لمفتاح المرور وتحتاج إلى معالجة إضافية في تنفيذ WebAuthn؟#

يوفر نظاما التشغيل Windows 10 و Linux أقل قدر من الدعم لمفاتيح المرور، لذلك هناك حاجة إلى حلول بديلة مخصصة للمستخدمين على هذه المنصات. تساعد مراقبة إخفاقات WebAuthn على جانب العميل ورفض التحقق من الخادم كمسارات منفصلة في تحديد المشكلات الخاصة بنظام التشغيل في بيئة الإنتاج.

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

استكشف Console

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


LinkedInTwitterFacebook