[MUSIC]
يسمح خادم Express REST API الذي قمنا بتنفيذه في الوحدة السابقة لأي مستخدم بإجراء أي من عمليات GET أو POST أو DELETE.
لا توجد سيطرة على من يمكنه تنفيذ هذه العملية.
مما يعني أنه
إذا قمت بتشغيل خادم كهذا، فيمكن لأي شخص الدخول إلى خادمك
والبدء في معالجة المعلومات الموجودة داخل قاعدة البيانات الخاصة بك.
ومن الواضح أن هذا وضع خطير.
الطريقة التي يجب أن يتم بها تنفيذ هذا الخادم هي أنه
يجب أن يكون لديك نوع من القيود على
أنواع المستخدمين التي سيتم السماح لها بتنفيذ أي أنواع من العمليات.
لذلك ربما، سوف تسمح
للمستخدم المصرح به فقط لتنفيذ عمليات GET.
على سبيل المثال، إذا كنت تريد أن يكون الضيف قادرا على رؤية معلومات
حول الأطباق في مطعمك أو قائمة مطعمك
وهلم جرا، وهذا أمر مقبول تماما.
ولكن، قد تسمح لمسؤول فقط للذهاب في
وتعديل المعلومات حول الطبق أو لحذف طبق من القائمة.
وقم أيضًا بتحديث طبق موجود في القائمة، أو عرض ترويجي،
أو معلومات حول القادة في جانب الخادم.
الآن، هل يمكن أيضا أن يكون مجموعة أخرى من المستخدمين الذين سيتم تسجيلهم المستخدمين
الذين قد يسمح لهم لحفظ بعض من الأطباق الخاصة بهم كما الأطباق المفضلة لديهم،
وفقط أنها سوف تكون قادرة على التعامل مع قائمة من الأطباق المفضلة لديهم.
لذلك هذا هو مستوى آخر من التفويض أو
المصادقة التي تحتاج إلى تنفيذها.
لذلك، لديك درجات مختلفة من المستخدمين،
وأيضا، اعتمادا على أي نوع من العمليات سوف يسمح لهم لأداء.
لذلك كل هذا يعني أنك تحتاج إلى نوع من الأمان ليتم تضمينه
في جانب الخادم الخاص بك.
سننظر في كيفية مصادقة المستخدمين،
ثم نقرر نوع المستخدم هذا العميل.
ثم اعتمادا على نوع المستخدم،
يمكنك السماح للمستخدم لتنفيذ أنواع معينة من العمليات.
سنبدأ بالفهم الأساسي لهذا، ما نسميه
المصادقة الأساسية في جانب الخادم
للعميل، ثم نبني على ذلك طوال بقية هذه الوحدة.
ثم في نهاية هذه الوحدة، سوف ينتهي بنا الأمر بآلية
، مما يسمح للمستخدمين بتسجيل أنفسهم.
ويمكن للمستخدمين المسجلين تنفيذ عمليات معينة
لا يمكن للمستخدم غير المسجل، وهلم جرا.
لذلك سنقوم بفرض أنواع مختلفة من ضوابط الوصول
لمختلف العمليات على جانب الخادم استنادًا إلى نوع المستخدم.
بحيث يحدد لك المنظور، أو
بالأحرى فكرة ما سوف تواجهها في هذه الوحدة.
دعونا نبدأ بالمصادقة الأساسية،
الآلية الأساسية للغاية التي ستمكننا من مصادقة المستخدمين.
المصادقة الأساسية في HTTP هي آلية بسيطة للغاية،
والتي ستطلب من المستخدم
تقديم اسم مستخدم وكلمة مرور مع طلب.
وهناك بنية محددة
حول كيفية إرسال هذه المعلومات من العميل إلى جانب الخادم.
لذلك، هذه مسألة، مصادقة الوصول الأساسية، التي يدعمها HTTP،
هي مسألة من شأنها تمكين الخادم من تحدي العميل، وطلب
اسم المستخدم وكلمة المرور ليتم تقديمها من قبل العميل.
لذلك يمكن للخادم تحدي العميل لمصادقة نفسه عن طريق كتابة هذه
المعلومات.
يحتاج العميل إلى إرسال اسم المستخدم
وكلمة المرور استجابة للتحدي من جانب الخادم.
لذلك،
يجب أن تتضمن كل رسالة طلب تنشأ من عميل النموذج المشفر لاسم المستخدم وكلمة
المرور في رأس الطلب الذي ينتقل من العميل إلى جانب الخادم.
لذلك عندما يتلقى الخادم الطلب،
سيقوم الخادم باستخراج هذه المعلومات من رأس طلب العميل.
ثم استخدم ذلك لمصادقة العميل قبل
السماح بالوصول إلى العمليات المختلفة على جانب الخادم.
إذن، كيف تعمل هذه المصادقة؟
إذا أرسل العميل طلبًا إلى الخادم،
ولم يتضمن طلب العميل هذا تكوين التفويض،
فسيقوم الخادم بتحدي العميل، ويطلب من العميل إرسال هذه المعلومات.
يتحدى الخادم العميل من خلال
تضمين رأس في رسالة الرد القادمة.
الرأس مع النوع كما وو-المصادقة،
ثم الجزء الثاني حيث يحدد النوع هو المكان الذي
سيحدد فيه نوع المصادقة التي يحتاج العميل إلى إرسالها.
وسنبدأ بفهم المصادقة الأساسية هنا.
ولاحظ أيضًا أن رسالة الرد ستحتوي على رمز خطأ 401،
وهو غير مصرح به، والذي يمثل غير مصرح به.
لذلك عندما يعود الرد من جانب الخادم، فإن العميل،
ردًا على هذا الرد، سيتعين على العميل إرسال طلبه،
بما في ذلك حقل رأس محدد في رسالة الطلب الخاصة بتفويض النوع.
وسيحتوي حقل رأس التفويض هذا على بعض المعلومات هناك.
للحصول على مصادقة أساسية, هذه المعلومات ستكون في شكل,
كالكلمة الأولى هنا, ستكون الأساسية.
ثم تليها مساحة هنا، تليها سلسلة مشفرة Base64 هنا. تقوم
هذه السلسلة المشفرة Base64 بترميز اسم المستخدم
وكلمة المرور بتنسيق معين، ثم تتضمن ذلك في الرأس.
الآن أنت تقول، إذا أرسلت رسالة طلب مثل هذه،
بما في ذلك هذا، في الرأس، ثم أي شخص في المنتصف.
لذا إذا كنت تعرف أي شيء عن الأمن
وكيف يمكن إطلاق الرجل في الهجمات الوسطى، فمن الواضح
أن هذا يمكن استرجاعه من قبل متسلل بين،
ومن ثم يمكن استخدامه لتزييف العميل الحقيقي.
و مرة أخرى, لن ندخل في هذا السؤال في الوقت الراهن.
عندما أتحدث عن HTTPS في الوحدة التالية،
سأعود لمعالجة هذه المشكلة بمزيد من التفصيل.
ولكن في الوقت الحالي، سيتم إرسال المعلومات الموجودة في الرأس
دون أن يتم تشفيرها في الرأس في هذه اللحظة.
الآن، أحد الأسباب الأخرى التي تجعلني أفعل ذلك هو أنه، حتى نتمكن من النظر
في العنوان مباشرة ثم نرى هذه المعلومات في الرأس نفسه.
لذلك، عندما يرسل العميل هذا الطلب، سيقوم الخادم باستخراج
المعلومات من رأس التفويض هذا في رأس الطلب.
ثم استخدم هذه المعلومات للتحقق مما إذا كان هذا
طلب عميل مصرح به أم لا.
الآن بالطبع سيكون سؤالك التالي،
ما الذي يحتوي عليه رأس التفويض هذا بالضبط؟
يتم إنشاء رأس التخويل نفسه كما يلي.
إذا كان لديك اسم مستخدم وكلمة مرور، فهذه هي
قطعتي المعلومات التي ستستخدمهما لمصادقة عميل.
لذلك سيتم تسلسل اسم المستخدم وكلمة المرور في سلسلة واحدة
عن طريق قول اسم المستخدم ونقطتين، وكلمة المرور نفسها.
لذلك
سيتم تجميع سلسلة اسم المستخدم والنقطتين وكلمة المرور معًا في سلسلة كاملة هنا.
هذه السلسلة الناتجة التي نحصل عليها هنا هي، المشفرة باستخدام ترميز Base64.
إذا كنت تعرف كيف يتم الترميز أساسيات الترميز،
قم بتحويل ذلك إلى رأس ASCII كما هو موضح في هذا المثال هنا،
لذلك هذا ليس سوى سلسلة من رؤوس ASCII.
الآن إذا كنت لا تعرف الكثير عن الترميز الأساسي القاسي، فلا تقلق بشأن ذلك،
فإنه لا يؤثر على فهمك لما يحدث هنا على أي حال.
لذلك هذه السلاسل المشفرة Basic64، لذلك
يتم ترميز هذه المعلومات الخاصة في سلسلة مثل هذه،
ثم يتم تضمينها في رأس الطلب الانتقال من العميل إلى الخادم.
رأس الطلب نفسه هو من تفويض النوع،
ثم يتبعه القيمة الفعلية هنا، والتي تقول،
Basic، ومساحة هنا، وسلسلة Base64 المشفرة هنا.
لذلك، عندما يتم استلام هذا من قبل قطع لدينا، سيقوم الخادم باستخراج هذه المعلومات،
ومن ثم من هنا، فإنه سيتم استخراج اسم المستخدم وكلمة المرور،
ومن ثم التحقق مما إذا كان ذلك يطابق مستخدم معتمد أم لا على جانب الخادم.
لمساعدتك على فهم أفضل لكيفية تنظيم التطبيق السريع بالفعل
وكيفية تنفيذ المصادقة نفسها، كما تعلمنا في وقت سابق،
يتم تنظيم التطبيقات السريعة نفسها في مجموعة من البرامج الوسيطة.
والطريقة التي يعمل بها التطبيق السريع هي أن
يتم تطبيق الوسيطة على الطلب ورسالة الاستجابة
بالترتيب الذي تم الإعلان عنه في طلبي السريع.
حتى إذا كان لديك express.use
ثم لديك أول واحد يقول خادم ثابت، ثم بعد ذلك،
لديك وسيط آخر، ثم بعد ذلك، لديك وسيط آخر.
التسلسل الذي يتم الإعلان عنه في ملف app.js الخوادم السريعة
، على سبيل المثال، هو التسلسل الدقيق الذي سيتم تطبيق الوسيطة.
لذلك طلب وارد من جانب الخادم كما تتذكر في
التطبيق السريع الخاص بك، يتم التعامل مع الطلب الوارد ككائن طلب.
كائن الاستجابة هو ما يبني الخادم السريع، ومن
ثم يسمح لك التالي بالانتقال إلى الوسيطة التالية
التي ستقوم بتطبيقها، وهكذا.
لذلك، طلب وارد مثل هذا، عندما يتعلق الأمر، يتم تطبيق الوسيطة الأولى.
وبعد ذلك بمجرد أن تقوم هذه البرامج الوسيطة بتحويل كل
من الطلب والاستجابة، فإنها تنتقل إلى الوسيطة التالية، والتي يتم تطبيقها عليها بعد ذلك.
على سبيل المثال، رأينا أننا طبقنا مورغان أولا،
ثم طبقنا محلل الجسم على الوسيطة.
لذلك يجب أن تكون قد حولت بالفعل الطلب وكائنات الاستجابة.
ثم بعد ذلك، يمكننا تضمين الوسيطة المصادقة في مكان هناك.
ستقوم الوسيطة المصادقة بمصادقة الطلب.
الآن، لذلك إذا كنت تستخدم المصادقة الأساسية، هل
يجب أن يحتوي طلبك في رأس رأس التفويض الموجود هناك.
لذلك سيتم استخراج رأس التفويض بواسطة الوسيطة المصادقة
ثم التحقق لمعرفة ما إذا كان المستخدم مأذونا به.
وإذا اكتشفت برامج المصادقة الوسيطة أنك مستخدم معتمد،
فسيسمح لك بالمضي قدمًا إلى المجموعة التالية من البرامج
الوسيطة التي تتبع خطوة المصادقة.
وسيتم معالجة السجلات الخاصة بك من قبل الوسيطة اللاحقة.
ولكن من ناحية أخرى،
إذا قررت البرامج الوسيطة للمصادقة أنك لست مستخدمًا
مرخصًا، فستأخذك برامج المصادقة الوسيطة على طول مسار مختلف.
ثم قم بإنشاء خطأ، ثم قم بإرسال
رد خطأ مناسب إلى جانب العميل هذا
وسيتم إعادة توجيهه إلى معالج الأخطاء.
لذلك سيتم إجراء إعادة التوجيه هذه إلى معالج الأخطاء عن طريق استدعاء Next
مع الخطأ كمعلمة لذلك التالي هنا.
لذا فإن التالي هو بالضبط هذا التالي الذي نراه في مورد الطلب التالي هنا.
وهكذا، وهذا سوف يأخذك على طول الطريق وصولا إلى معالج الخطأ،
والتي سوف تتعامل مع الخطأ ومن ثم إرسال رسالة الخطأ مرة أخرى إلى جانب العميل،
مشيرا إلى فشل المصادقة.
إذن هذه هي الطريقة التي
يعمل بها التفويض الأساسي النموذجي، أو المصادقة الأساسية في التطبيق من جانب الخادم.
بعد فهم هذا، دعونا ننتقل إلى التمرين حيث
سنقوم بتنفيذ المصادقة الأساسية في تطبيقنا
ونرى كيف يصادق المستخدمين.
[ موسيقى]