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

ملخص Passkeys. إرشادات عملية وأنماط إطلاق ومؤشرات KPI لبرامج passkeys.
يعد توفير مصادقة مستخدم بسيطة وآمنة أمراً ضرورياً للشركات الرقمية في عام 2024. وتعتبر مفاتيح المرور، بصفتها المعيار الجديد لتسجيل الدخول، الحل المثالي لتلبية هذه الاحتياجات. ومع ذلك، فإن تجربة المستخدم المحسنة والأمان الذي توفره مفاتيح المرور للمستخدم يأتي بتكلفة عند تنفيذها من قبل المطورين. تنبع صعوبة التنفيذ من حقيقة أن مفاتيح المرور تعتبر جديدة نسبياً - للمستخدمين وكذلك للمطورين - وأن تنفيذها يمكن أن يكون صعباً للغاية مقارنة بالمصادقة القائمة على كلمات المرور. في الواقع، تحتاج إلى ما لا يقل عن أربع نقاط نهاية لواجهة برمجة التطبيقات (API) لمصادقة مفتاح المرور مقارنة بنقطة نهاية واحدة لمصادقة كلمة المرور.
يعد خادم WebAuthn (جزء المكتبة الأخضر) أحد المكونات الأساسية على جانب الخادم لتوفير المصادقة باستخدام مفاتيح المرور. للحصول على دليل شامل حول كيفية دمج خادم WebAuthn في نطاق تكامل المؤسسات الأوسع، راجع مقالنا المخصص.
المصدر: Yubico
في منشور المدونة هذا، نقوم بمقارنة العديد من مكتبات / حزم / حزم أدوات تطوير البرمجيات لخادم WebAuthn، ونحلل الاختلافات ونقدم توصية للمطورين الجدد في مجال تنفيذ مفاتيح المرور.
لفهم سبب الحاجة إلى مكتبة خادم WebAuthn في المقام الأول بشكل أفضل، دعنا نلقي نظرة على كيفية تنفيذ مفاتيح المرور. من حيث المبدأ، هناك طريقتان لدمج مفاتيح المرور في مواقع الويب والتطبيقات:
في حين أن حل مفتاح المرور التابع لجهة خارجية سهل الدمج وعادة ما يوفر الكثير من وقت الهندسة (خاصة للحالات الطرفية، الصيانة، الاسترداد، البدائل وتجربة مستخدم مفتاح المرور المحسنة)، يفضل بعض المطورين تنفيذ كل شيء بأنفسهم.
جرّب passkeys في عرض مباشر.
دعونا نلقي نظرة على كيفية عمل التنفيذ الذاتي لمفاتيح المرور. في الإعداد الأساسي للغاية، يلزم وجود آلية للتسجيل (إنشاء حساب) والمصادقة (تسجيل الدخول). يتم التعامل مع كلتا العمليتين، اللتين يطلق عليهما أيضاً مراسم WebAuthn، بشكل مختلف، على الرغم من أن التدفق العام يتبع مخططاً مشابهاً:
نظراً لأن كل عملية تسجيل / تسجيل دخول تتضمن هذه الخطوات، تحتاج الواجهة الخلفية إلى تتبع المستخدمين ومفاتيح المرور وطلبات التسجيل / تسجيل الدخول.
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 والتحقق من تحديات تسجيل الدخول، مما يعني أنها تتولى الجزء التشفيري والأكثر تعقيداً نيابة عنك.
انضم إلى مجتمع Passkeys للحصول على التحديثات والدعم.
توفر جميع مكتبات خوادم WebAuthn التي تم تحليلها الوظائف اللازمة لتقديم المصادقة باستخدام مفاتيح المرور. لذلك، أولينا اهتماماً خاصاً للمعايير التالية:
تم تحليل مكتبات خوادم WebAuthn التالية (مرتبة تنازلياً حسب عدد النجوم على GitHub في ديسمبر 2023):
اطلع على عدد الأشخاص الذين يستخدمون passkeys فعلياً.
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[]; };
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; } }
<?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; } }
يوفر الجدول التالي نظرة عامة على مكتبات خوادم WebAuthn:
اشترك في Passkeys Substack للحصول على آخر الأخبار.
نظراً لأن معظم المكتبات قوية بنفس القدر وتنفذ معيار WebAuthn، نوصي بشجرة القرار التالية:
إذا كنت ترغب فقط في معرفة المزيد عن خوادم WebAuthn بشكل عام دون أن يكون لديك بالفعل مشروع محدد، فيمكننا تقديم بعض التوصيات نظراً لوجود بعض الاختلافات بين المكتبات والمواد التكميلية الخاصة بها مثل الوثائق وأمثلة التنفيذ. لذا، بالنسبة لمطوري البرمجيات المتحمسين لبدء رحلة تنفيذ مفاتيح المرور، ننصح باختيار التطبيقات التالية:
للحصول على فهم أعمق حول كيفية عمل WebAuthn على جانب الخادم، يمكنك قراءة القسم التفصيلي جداً WebAuthn Relying Party Operations في وثيقة معايير WebAuthn RFC والذي يوضح بالتفصيل كل خطوة يجب تنفيذها من أجل تسجيل بيانات اعتماد جديدة (7.1) و التحقق من تأكيد المصادقة (7.2).
قم بتقييم المتطلبات الخاصة بمفتاح المرور و WebAuthn التي لديك. في هذا المقال، افترضنا أنك ترغب فقط في دعم مفاتيح المرور كبيانات اعتماد قابلة للاكتشاف. اقرأ حول PublicKeyCredentialCreationOptions و PublicKeyCredentialRequestOptions جنباً إلى جنب مع استدعاءات WebAuthn API لجانب العميل navigator.credentials.create() و navigator.credentials.get() لضبط المعلمات في تكوين SDK لخادم WebAuthn بشكل صحيح لحالة الاستخدام الخاصة بك.
بالنسبة لجميع مكتبات خوادم WebAuthn، ستحتاج إلى توفير هيكل قاعدة البيانات المناسب لحفظ / الوصول إلى المعلومات التالية:
بالنسبة لبعض المكتبات، هناك توصيات وأمثلة محددة (إذا وجدناها مفيدة، فقد قدمناها أعلاه). من الضروري أن تفهم تماماً حقول WebAuthn التي يجب تخزينها وأين. انتبه بشكل خاص لتحديد القيمة التي تريد استخدامها كمعرف للمستخدم (user.id). لدينا شرح أكثر تفصيلاً هنا. ضع في اعتبارك أيضاً ما يحدث عندما يقوم المستخدم بحذف مفتاح مرور. إلى جانب ذلك، يمكنك اختيارياً تقييد استخدام مصادقين معينين. يمكن العثور على قائمة بالمصادقين الصالحين المتعلقين بمفاتيح المرور هنا. وفي حال كنت ترغب أيضاً في دعم والتحقق من مصادقات (attestations) مفاتيح الأمان، فهذه قصة مختلفة تماماً. يمكنك العثور على مزيد من المعلومات هنا.
حدد الأجهزة التي سيستخدم عليها المستخدمون مفاتيح المرور وطرق المصادقة البديلة. إذا لم تكن متأكداً من الأجهزة والمتصفحات وأنظمة التشغيل التي يستخدمها المستخدمون، فتحقق من State of Passkeys للحصول على أحدث البيانات حول جاهزية مفاتيح المرور عبر المنصات والمتصفحات وأنظمة التشغيل. إذا كانت لديك أسئلة محددة حول اعتماد مفتاح المرور وحصة جاهزية مفاتيح المرور لأجهزة معينة، فلا تتردد في التواصل معنا. يسعدنا تزويدك بمزيد من الرؤى ومساعدتك في هذا الموضوع (راجع أيضاً أحدث منشور مدونة لدينا بخصوص جاهزية مفتاح المرور). من منظور القابلية للملاحظة، احتفظ بفشل WebAuthn على جانب العميل ورفض التحقق من الخادم كمسارات منفصلة؛ لتعريفات الفئات على جانب العميل، استخدم أخطاء WebAuthn. علاوة على ذلك، يجب أن تضع في اعتبارك أنه بالنسبة لـ Windows 10 و Linux، ستحتاج إلى ابتكار حلول مخصصة لأن نظامي التشغيل هذين يوفران أقل قدر من دعم مفاتيح المرور (إن وجد).
اطلع على عدد الأشخاص الذين يستخدمون passkeys فعلياً.
يوجد الآن مكتبة خادم WebAuthn راسخة تقريباً لكل لغة أو إطار عمل. وتظهر مقارنة مكتبات اللغات المختلفة عدم وجود تفوق واضح لتطبيقات معينة. بدلاً من ذلك، يجب عليك استخدام إطار العمل / لغة البرمجة التي أنت على دراية بها أكثر. وبدلاً من ذلك، إذا كنت لا ترغب في تنفيذ WebAuthn بنفسك والاعتناء بكل الأشياء المصاحبة له، فيمكنك تجربة حل مخصص مبني مسبقاً لمصادقة مفتاح المرور مثل 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 بالتساوي، يجب أن يعطي الاختيار الأولوية للإلمام بمجموعة التقنيات الحالية الخاصة بك بدلاً من الاختلافات في الميزات بين المكتبات.
كحد أدنى، يجب عليك حفظ بيانات الاعتماد والمستخدمين والتحديات والمصادقين. انتبه جيداً إلى القيمة التي تقوم بتعيينها كمعرف مستخدم (userHandle)، وخطط للسيناريوهات التي قد يحذف فيها المستخدمون مفتاح مرور من أجهزتهم.
تتعامل مكتبات خادم WebAuthn مع العمليات التشفيرية الأكثر تعقيداً: إنشاء معلمات PublicKeyCredentialCreationOptions و PublicKeyCredentialRequestOptions والتحقق من التحديات الموقعة. القيام بذلك بشكل صحيح من الصفر أصعب بكثير من استخدام مكتبة متوافقة مع FIDO والتي تم اختبارها وتدقيقها بالفعل.
يوفر نظاما التشغيل Windows 10 و Linux أقل قدر من الدعم لمفاتيح المرور، لذلك هناك حاجة إلى حلول بديلة مخصصة للمستخدمين على هذه المنصات. تساعد مراقبة إخفاقات WebAuthn على جانب العميل ورفض التحقق من الخادم كمسارات منفصلة في تحديد المشكلات الخاصة بنظام التشغيل في بيئة الإنتاج.
مقالات ذات صلة
جدول المحتويات