دعم Webauthn

RFC Webauthn

تهدف هذه الوثيقة إلى توثيق أهداف مشروع Discourse فيما يتعلق بمصادقة FIDO2 / Webauthn.

لماذا؟

سيؤدي إضافة دعم Webauthn إلى Discourse إلى زيادة أمان حسابات المستخدمين، مما يتيح إنشاء حسابات خالية من كلمات المرور بسهولة باستخدام الميزات الآمنة لأجهزتهم، مثل قارئ البصمة في الهواتف الذكية.

طرق المصادقة

  • Webauthn كعامل مصادقة ثانٍ (يعمل كبديل لـ Google Authenticator)
  • Webauthn كعامل مصادقة أول (يعمل كبديل لتسجيل الدخول عبر الشبكات الاجتماعية)
  • Webauthn كعامل مصادقة متعدد العوامل (تسجيل دخول بدون اسم مستخدم)

Webauthn كعامل مصادقة ثانٍ

سيمكن هذا المستخدم من Discourse، الذي يمتلك حسابًا نشطًا بالفعل، من استخدام Webauthn كعامل مصادقة ثنائي (2FA)، حيث نوفر حاليًا دعمًا لـ TOTP فقط.

يمكن أن تعمل أي طريقة Webauthn هنا، سواء كانت قياسات بيومترية للجهاز (مثل قارئ البصمة في أندرويد، أو Windows Hello في أجهزة اللابتوب)، أو شريحة آمنة في الجهاز (مثل TPM، أو Secure Enclave)، أو مفتاحًا ماديًا (مثل Yubikey).

سيكون هذا متاحًا لكل مستخدم يتصفح باستخدام:

  • Microsoft Edge على نظام Windows، باستخدام Windows Hello (مع التعرف على الوجه، أو قارئ البصمة، أو رمز PIN)
  • Chrome على نظام macOS، باستخدام Touch ID
  • هاتف أندرويد
  • لابتوب/سطح مكتب/هاتف + مفتاح مادي (Yubikey، Google Titan)

Webauthn كعامل مصادقة أول (حسابات خالية من كلمات المرور)

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

ستعمل نفس طرق المصادقة المستخدمة في المصادقة الثنائية في حالة المصادقة الأولية: القياسات البيومترية، أو الشريحة الآمنة، أو المفتاح المادي.

سير عملية التسجيل


بدون حقل كلمة المرور

سير عملية تسجيل الدخول

Webauthn كعامل مصادقة متعدد العوامل (تسجيل دخول بدون اسم مستخدم)

سيوفر طريقة تسجيل دخول بديلة تطلب فقط إدخال بيانات Webauthn. سيقوم المفتاح الأمني المسجل بإضافة معلومات معرف المستخدم (user ID) إلى خادم Discourse.

تتطلب هذه الطريقة حاليًا مفتاح مصادقة حديث (مثل Yubikey 5) بالإضافة إلى Google Chrome 76 أو أحدث، لأنها تعتمد على ميزة تسمى “المفاتيح القابلة للنقل” (Resident Keys). وبما أن هذه الميزة تخزن البيانات على جهاز المصادقة، فقد تكون هناك قيود، فمثلاً يمكن لـ Yubikey 5C تخزين ما يصل إلى 25 مفتاحًا من هذا النوع فقط.

سير عملية التسجيل

هذه العمليات هي تطور عن عملية تسجيل الدخول الخالي من كلمات المرور، وليست سير عملية تسجيل دخول منفصل. وهذا يسمح بتنفيذ تدريجي.


بدون حقل كلمة المرور، مع إضافة مربع اختيار إضافي لاستخدام المفاتيح القابلة للنقل

سير عملية تسجيل الدخول


إذا تُرك اسم المستخدم فارغًا، سنحاول جلب معرف المستخدم (user_id) من جهاز المصادقة

المراجع

عروض توضيحية

https://webauthndemo.appspot.com/

https://webauthn.io/dashboard

موارد

https://medium.com/@herrjemand/introduction-to-webauthn-api-5fd1fb46c285

22 إعجابًا

شكرًا لك على هذه طلب المراجعة (RFC)، فهي شاملة جدًا! ومع ذلك، لدي فكرة تتعلق بتدفق استخدام Webauthn كطريقة للمصادقة الثنائية مع تسجيل الدخول العادي باستخدام اسم المستخدم وكلمة المرور. عندما أستخدم المصادقة الثنائية عبر TOTP، تظهر لي هذه النافذة المنبثقة عند تسجيل الدخول:

إذا كان المستخدم قد فعّل كودات TOTP ومصادقات Webauthn معًا، فماذا سيكون تدفق العمل؟ هل سيختار المستخدم في هذه النافذة المنبثقة ما إذا كان يريد استخدام Webauthn أو رمز المصادقة الثنائية؟ أم أن هذا سيكون مرهقًا جدًا؟ ربما يمكن لـ Discourse افتراضيًا طلب Webauthn إذا كان المستخدم قد قام بإعداده ويدعمه المتصفح، ثم العودة إلى المصادقة الثنائية كخيار احتياطي؟

التنفيذات الحالية

Twitter:



Github:


حساب Google:



6 إعجابات

نعم، يبدو أن هذا يصبح الطريقة القياسية لتنفيذ WebAuthn، وأنا معجب جدًا بتدفق تسجيل الدخول. أنا مقتنع تمامًا بأننا سنتجه في هذا الاتجاه هنا أيضًا.

7 إعجابات

شكرًا لك جيف، هذا منطقي. بعض الأفكار الأخرى اليوم بعد مزيد من البحث:

المصادقة بالعامل الأول

  • إذا قام مستخدم بالتسجيل في حساب Discourse باستخدام Webauthn كطريقة للمصادقة بالعامل الأول، فهل توجد طريقة لاحقًا لتغيير ذلك واستخدام كلمة مرور بدلاً من ذلك؟ وإذا كان الأمر كذلك، هل ستتحول مصادقة Webauthn التي تم إعدادها إلى طريقة عادية للمصادقة الثنائية (2FA) حتى الوقت الذي يقرر فيه المستخدم إزالتها؟
  • إذا تم استخدام Webauthn كطريقة للمصادقة بالعامل الأول، فهل سيظل يظهر في واجهة المستخدم ضمن تفضيلات العامل الثاني، ولكن دون إمكانية إزالته؟
  • هل من المنصف أيضًا القول إن المستخدم سيتم منعه من إعداد تسجيلات الدخول عبر الشبكات الاجتماعية بنفس الطريقة التي يُمنع بها إذا كانت المصادقة الثنائية (2FA) مفعلة؟
  • أتخيل أن قسم تفضيلات المستخدم الذي تُرسل إليه رسالة إعادة تعيين كلمة المرور سيتغير أيضًا، نظرًا لأنهم لن يكون لديهم كلمة مرور عند استخدام العامل الأول:

6 إعجابات

من حيث الصياغة، لا أحب استخدام مصطلح “Web Authn”؛ فأعتقد أنه قد يُربك المستخدمين النهائيين، لذا يُفضّل استخدام “مفتاح الأمان” أو ما شابه ذلك.

أود بشدة تجنب التفكير في مصطلحات مثل “العامل الأول” أو “المصادقة الخالية من كلمة المرور” في هذه المرحلة؛ فبالنسبة لي، يجب أن نطلق هذه الميزة ونعمل بها لمدة 3-4 أشهر على الأقل قبل حتى النظر في ذلك.

خاصةً أننا ندعم بالفعل تسجيل الدخول عبر البريد الإلكتروني، مما يعني أنه يمكن للمستخدم تقنيًا نسيان كلمة المرور.

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

أما بالنسبة لشيء أفكر فيه على المدى الطويل كعنصر منفصل، فيمكننا استخدام “تطبيق Discourse” للمصادقة الثنائية (2FA)، وهو ما سيكون رائعًا جدًا @pmusaraj. وهذا قد يجعل استخدام المصادقة الثنائية أكثر شيوعًا وانتشارًا.

14 إعجابًا

نعم، أنا أتفق معك. مصطلح “webauthn” في النماذج الأولية هو مجرد نص مؤقت.

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

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

6 إعجابات

ويتبع GitHub نفس المنهجية:

8 إعجابات

بشأن “WebAuthn كمُوثّق أولي”: هناك نقاش في النسخة الثانية من المعيار حول ذكر الآثار الخاصة بالخصوصية التي قد تنجم عن ذلك: https://github.com/w3c/webauthn/pull/1250/

بشأن تسمية مفاتيح الأمان، أتفق مع الأسباب المذكورة في طلب الدمج الخاص بـ RubyGems.org.

اقترحت هناك أيضًا إضافة طابع زمني لـ “آخر استخدام لتسجيل الدخول” إلى جانب لقب مفتاح الأمان للمساعدة في التمييز بينها واكتشاف أي نشاط ضار محتمل.

8 إعجابات

في العمل (الذي يُعدّ سياقًا عالي الأمان)، لدينا أيضًا تنبيه يُرسل بريدًا إلكترونيًا إليك بعد مرور 90 يومًا على عدم استخدام مفتاح الأمان، مما يحثك إما على استخدامه أو إزالته من حسابك.

أعتقد أن تنفيذ ذلك بعد 360 يومًا قد يكون فكرة جيدة؟

7 إعجابات

فكرة رائعة. إن وجود فاصل زمني أقل سيكون مزعجًا لأننا نستخدم جلسات “لانهائية”، وأعتقد أن معظم الأشخاص سيكون لديهم مفتاح يومي بالإضافة إلى مفتاح احتياطي في الدرج. دون احتساب مفاتيح الأمان الأصلية لأجهزة متعددة.

6 إعجابات

يسعدني أن أعلن أنني أدمجت للتو طلب السحب (PR) الخاص بهذه الميزة، لذا يمكننا تجربة WebAuthn قريبًا جدًا، قريبًا جدًا! :tada:

8 إعجابات

لقد أضفت بصمة Android الخاصة بي، ومفتاح Yubikey عبر NFC ومفتاح Yubikey عبر USB-C، باستخدام Chrome على Android وFirefox على سطح المكتب، وكل شيء يبدو جيدًا حتى الآن.

خطأ كبير @Martin_Brennan @featheredtoast، لا توجد طريقة لتسجيل الدخول في عرض الهاتف المحمول:

يعمل بشكل جيد في عرض سطح المكتب:

10 إعجابات

بعض الملاحظات العشوائية :slight_smile:

هذا لا يبدو صحيحًا:

يجب أن نتبع تصميم المكون (Composer) هنا فيما يتعلق بالهامش ولون زر الإلغاء.


بدلاً من “رسالة إعادة تعيين كلمة المرور”، يبدو أنها لا تنتمي إلى هذا المكان.

ربما الأفضل أن يكون:

متابعة إلغاء

نسيت كلمة المرور؟ ← باللون الرمادي الفاتح


حقل إدخال كلمة المرور يبدو كبيرًا جدًا، يجب أن يكون أصغر قليلًا.


أعتقد أن النص هنا يجب أن يكون “إزالة” أو “حذف”


إذا حاولت إضافة مفتاح YubiKey سبق إضافته، تظهر رسالة خطأ غامضة.


بشكل عام :+1: :+1: :+1: :confetti_ball:

9 إعجابات

آه، كنتُ أعرف أنني أغفلتُ مسارًا أثناء المراجعة. تفتيش ممتاز :heart:

أعتقد أن الأمر ظل على هذه الحالة منذ فترة، لكن نعم، هذه تغييرات جيدة.

أتفق، تغيير جيد.

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

9 إعجابات

شكرًا لك يا @Falco ويا @sam على ملاحظاتكما. لم أكن أدرك أن هناك مسارًا مختلفًا لتسجيل الدخول عبر الهاتف المحمول! سأبدأ العمل على هذه الإصلاحات، بما في ذلك تغييرات تسمية كلمة المرور/الأزرار، الليلة، وآمل أن أقوم بفتح طلب سحب (PR) جديد للإصلاح!

7 إعجابات

أنا سعيد جدًا بأن هذا يعمل على جهاز Android الخاص بك أيضًا (على الرغم من أن العرض على الهاتف المحمول لا يعمل بشكل صحيح) — لم يكن لدي جهاز Android لإجراء الاختبار عليه.

6 إعجابات

هل يمكنني التوصية بهاتف شاومي مي 9؟

3 إعجابات

لست متأكدًا من أنني مستعد للعودة إلى أندرويد — فأنا أحب هاتفي iPhone 8 كثيرًا :sweat_smile:

5 إعجابات

إليك طلب السحب لإصلاح ما سبق :rocket:

6 إعجابات

من قال عن الإرجاع؟ هذا تفكير من العالم القديم! الأشخاص الحديثون يمتلكون أجهزة متعددة :wink:

8 إعجابات