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

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

أولاً ، دعنا نلقي نظرة على الخطة العامة. ما هي الخطوات التي يجب تنفيذها في عملية أعمالنا؟

  1. التحقق من تسجيل الدخول (تأكد من تسجيل المستخدم بالفعل).
  2. التحقق من صحة كلمة المرور.
  3. إرسال رمز التأكيد بالبريد أو الرسائل القصيرة.
  4. التحقق من ملاءمة الكود.
  5. التحقق من صحة الكود.
  6. إتمام المصادقة.

المرحلة التحضيرية

حتى قبل أن تبدأ في تصميم المصادقة ذات العاملين ، في مرحلة تسجيل المستخدم ، يجب أن تتأكد مما يلي:

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

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

auth module

التحقق الدخول

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

user check

للقيام بذلك ، يقوم DB: Search User بحظر البحث عن مستخدم مع تسجيل الدخول المحدد في قاعدة البيانات. تأكد من تعيين معلمة SearchExact = True للبحث عن المطابقة التامة.

يتم تمرير البيانات المستلمة إلى كتلة Array Element مع الفهرس 0 (يبدأ العد من الصفر ، وستتوافق القيمة الوحيدة الموجودة دائمًا مع الفهرس 0 في المصفوفة).

تتحقق كتلة Is Null مما إذا كان المستخدم قد تم العثور عليه بالفعل. واعتمادًا على النتيجة ( True/False ) ، ستقوم كتلة If-Else إما بمقاطعة عملية الأعمال برسالة خطأ (منع Raise Error ) أو توجيهها إلى أبعد من ذلك.

التحقق من كلمة المرور

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

password check

وهنا ، من الضروري أن نفهم أن كلمات المرور لا يتم تخزينها بشكل صريح في قاعدة البيانات. تعمل وظيفة Bcrypt على تجزئتها ، ويتم تخزين التجزئة الناتجة فقط في قاعدة البيانات. لذلك ، حتى لو افترضنا حدوث تسرب للبيانات ، فلن يتمكن المهاجمون من العثور على كلمات مرور المستخدم ؛ يتم تشفيرها بشكل آمن.

لهذا السبب ، لا يمكنك ببساطة الحصول على كلمة المرور من قاعدة البيانات ومقارنتها بكلمة المرور التي تم إدخالها. تحتاج إلى الحصول على تجزئة كلمة المرور واستخدامها للمقارنة. لحل هذه المشكلة ، يتم استخدام كتلة Auth: Probe Password . كمعلمات إدخال ، تأخذ كلمة المرور التي أدخلها المستخدم ( password ) وتجزئة كلمة المرور المخزنة في قاعدة البيانات ( hashed_password ) وتحولها إلى نوع البيانات String (كتلة To String ).

اعتمادًا على النتيجة ، كما في الخطوة السابقة ، باستخدام كتلة If-Else ، إما أن نعرض رسالة خطأ ( Raise Error ، Message = Password is wrong ) أو نوجه العملية إلى المرحلة التالية.

امتداد نموذج المستخدم

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

بشكل عام ، يحتوي نموذج User في البداية على الحقول التي يمكن استخدامها لهذه المهمة - Confirmed, Confirmation code, Confirmation code expires at . لكن في هذا المثال ، سنفترض أن هذه الحقول تستخدم فقط للتسجيل والتحقق الأولي من الحساب.

لمزيد من الوضوح في العملية ، دعنا ننشئ نموذجًا منفصلاً ( two-factor authentication ) ، twofa نموذج User به (علاقة 1 إلى 1 ، has one ) ، وأضف حقلًا واحدًا - code (نوع String ).

user model

تستعد لإرسال رسائل البريد الإلكتروني

لإرسال رسائل البريد الإلكتروني مع رموز التأكيد ، يجب على المرء أن يعد أولًا. أحد أكثر الخيارات التي يمكن الوصول إليها هو استخدام وحدة Custom SMTP ، والتي تحتاج إلى تثبيتها وتكوينها.

custom SMTP module

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

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

إرسال رمز التحقق

لقد تحققنا من تسجيل الدخول وكلمة المرور وأكملنا جميع الاستعدادات اللازمة ، لذا يمكنك الآن المتابعة لإرسال رسالة مع رمز التأكيد.

send email

تستخدم كتلة Custom SMTP: Send Email مجموعة من العناوين كوجهة. لذلك ، على الرغم من أنك تحتاج إلى إرسال حرف إلى عنوان واحد فقط ، يجب إضافته إلى المصفوفة. لهذا ، يتم استخدام كتلة Append Array .

الخطوة التالية هي إنشاء رمز التحقق. كتلة Random string مناسبة لهذا. سنرسل رمزًا يتكون من 6 أرقام عشوائية ونقوم بإعداد الإعدادات المناسبة. Length = 6, With 0-9 = True ، جميع المعلمات الأخرى = False .

بعد ذلك ، تحتاج إلى إنشاء نص الرسالة. للقيام بذلك ، استخدم كتلة Concat Strings لإضافة نص توضيحي إلى الكود الذي تم إنشاؤه ( First = Verification code: :) ، وقم بتحويل النتيجة إلى نوع البيانات Text ( To Text block) ، وقم بتوصيل النتيجة بمعلمة النص body للبريد الإلكتروني إرسال كتلة.

بالنسبة للإرسال النهائي ، يبقى فقط تحديد موضوع الرسالة ( subject ) والمرسل ( from_name ).

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

save twofa

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

الخطوة الأخيرة من المرحلة هي استخدام كتلة Raise Error لإرجاع رسالة حول إرسال الرمز إلى البريد الإلكتروني.

التحقق من ملاءمة الكود

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

code lifetime check

دعنا نستخدم كتلة Current date & time الحاليين للحصول على الوقت الحالي. قم بتوصيله بالمعلمة B لكتلة Date & time difference . سنستخدم الحقل المحدث في نموذج UpdatedAt twofa A

نتيجة لذلك ، نحصل على Time span - الفرق بين نقطتين زمنيتين. يبقى فقط للتحقق مما إذا كان هذا الاختلاف يتجاوز قيمة معينة محددة. في مثالنا ، هذه 5 دقائق ، والتي سنقوم بتعيينها كقيمة ثابتة B للكتلة Greater .

time span value

ستستخدم كتلة If-Else نتيجة المقارنة لتوجيه العملية بشكل أكبر. إذا كان True (تجاوز الفارق 5 دقائق) ، فستعود العملية إلى خطوة إرسال الخطاب ؛ سيتلقى المستخدم رمزًا محدثًا. في حالة False (الرمز حديث ومحدث) ، سيكون من الممكن متابعة التحقق من هذا الرمز.

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

المرحلة الأخيرة من المصادقة هي فحص الكود المستلم.

code check

يجب أن تتحقق كتلة Equal من أن الكود الذي تم تمريره من قبل المستخدم يطابق الكود المخزن في نموذج twofa المرتبط بالمستخدم. إذا لم تكن هذه هي الحالة وتم تحديد الرمز بشكل غير صحيح ( If-Else -> False ) ، فأنت بحاجة إلى عرض رسالة خطأ ( Raise Error , Message = Code is wrong ). إذا أكدت المقارنة المطابقة ، يمكنك المتابعة إلى مرحلة المصادقة النهائية.

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

إنشاء نقطة نهاية

تم إنشاء عملية الأعمال ولكنها ليست متاحة للاستخدام بعد. أنت بحاجة إلى إنشاء نقطة نهاية لتشغيل هذه العملية التجارية.

2fa endpoint

قد يكون الحل المعقول هو استخدام نقطة نهاية المصادقة الافتراضية ( POST /Auth ). سيكون كافيًا استبدال عملية الأعمال الخاصة به وتثبيت العملية التي تم إنشاؤها للتو. وبالتالي ، سيتم تعطيل المصادقة البسيطة ، وسيتم استخدام المصادقة ذات العاملين بدلاً من ذلك.

النشر والاختبار

هذا يكمل إنشاء المصادقة الثنائية. يمكنك نشر النتيجة والتحقق منها أثناء العمل. لهذا ، من الملائم استخدام Swagger ، والذي يمكن الوصول إليه بالنقر فوق اسم خطة النشر في قسم Project API من الزر Preview .

project API

يبقى فقط العثور على نقطة النهاية المطلوبة في القائمة ، وإدخال بيانات المستخدم وبدء التنفيذ باستخدام زر Execute . إذا تم العثور على أي أخطاء أثناء الاختبار ، فارجع إلى عملية الأعمال وقم بإجراء التغييرات اللازمة.

Swagger

Was this article helpful?

AppMaster.io 101 حلقة دراسية مكثفة

10 وحدات
2 أسابيع

لست متأكدا من أين تبدأ؟ ابدأ في الدورة التدريبية المكثفة للمبتدئين واستكشف AppMaster من الألف إلى الياء.

ابدأ الدورة
Development it’s so easy with AppMaster!

هل تريد المزيد من المساعدة؟

حل أي مشكلة بمساعدة خبرائنا. وفر الوقت وركز على بناء تطبيقاتك.

headphones

اتصل بالدعم

أخبرنا عن مشكلتك ، وسنجد لك حلاً.

message

دردشة المجتمع

ناقش الأسئلة مع مستخدمين آخرين في محادثتنا.

الانضمام إلى المجتمع