[MUSIC]
في الدرس السابق، تعلمنا عن المصادقة الأساسية.
رأينا أنه في المصادقة الأساسية، سيتعين على العميل الاستمرار بشكل صريح
في إضافة حقل التفويض الذي يحتوي على اسم المستخدم وكلمة
المرور لكل طلب يرسله العميل إلى جانب الخادم.
الآن هذا جيد تمامًا للمصادقة البسيطة.
ملفات تعريف الارتباط هي آلية أخرى يتم توفيرها
تمكن الخادم الخاص بك من توقع العميل تخزين بعض المعلومات على جانب العميل
وتضمين تلك المعلومات بشكل صريح في كل طلب صادر.
لذلك بدلاً من تضمين اسم المستخدم وكلمة
المرور المشفرة الخاصة بك في القاعدة 64 كما فعلنا في المصادقة الأساسية، باستخدام ملفات تعريف الارتباط،
قد يقوم الخادم بإعداد جزء صريح من المعلومات على جانب العميل
والتي سيتم تضمينها بعد ذلك في كل طلب صادر من جانب العميل.
الآن توسيع هذا أكثر من ذلك، إذا كان الخادم الخاص بك يريد تتبع المعلومات حول
العميل الخاص بك، ثم الملقم قد إعداد صراحة آلية تتبع جلسة العمل.
الآن، ملفات تعريف الارتباط صغيرة ولا يمكن تخزين الكثير من المعلومات هناك،
وهذا بالطبع لا يمكن تضمينها في الطلب الصادر.
يمكن أن تتضمن ملفات تعريف الارتباط بعض المعلومات
الأساسية في رأس الطلب الصادر من العميل.
الآن، إذا كنا نريد الكثير من المعلومات ليتم تتبعها حول عميل
على جانب الخادم، ثم جلسات صريحة تمكننا من القيام بذلك.
دعونا ندرس المزيد عن ملفات تعريف الارتباط
وجلسات Express بمزيد من التفصيل في هذا الدرس
ونستكشفها أيضًا في التدريبات التي تتبع هذه المحاضرة.
إذن ما هي ملفات تعريف الارتباط HTTP؟
ملفات تعريف الارتباط HTTP، كما ذكرت، هي جزء صغير من البيانات التي يتم إرسالها
من خادم ويب ويتم تخزينها على جانب العميل.
الآن، جميع المتصفحات تقريبًا لديها القدرة
على دعم تخزين ملفات تعريف الارتباط على جانب العميل، وتضمينها تلقائيًا
في الطلب عند إرسال الطلب إلى خادم معين.
لذلك
سيتضمن كل طلب لاحق من جانب العميل رأسًا جديدًا هناك
مع ملف تعريف الارتباط في رأس الطلب.
الآن من الواضح، إذا كنت قد رأيت الصحافة الشعبية قد حصلت على سمعة سيئة
هناك، وهذا هو، بطبيعة الحال، ليس غير مستحق تماما.
ولكن هو في مهب وسيلة للخروج من نسبة ما هو حقا الحقيقة.
لذا خذ أي شيء تقرأه في الصحافة الشعبية عن الكوكيز
وسمعتها السيئة مع حبة الملح.
ملفات تعريف الارتباط مفيدة جدا للقيام بالكثير من الأشياء المثيرة للاهتمام.
ويمكننا التأكد من أن ملفات تعريف الارتباط يمكن أن يكون
لها سلامة كافية مدمجة فيها بحيث لا يمكن التلاعب بها من قبل أي شخص بينهما.
الآن كيف يعمل تضمين إعداد ملف تعريف الارتباط هذا في الطلب الصادر؟
عندما يرسل عميل طلبًا إلى موقع الخادم،
إذا تمت مصادقة العميل على موقع الخادم.
على سبيل المثال، باستخدام المصادقة الأساسية،
ثم الخادم قد في المقابل، إعداد ملف تعريف ارتباط.
الآن، لإعداد ملف تعريف ارتباط على موقع العميل، سيتضمن الخادم في
رسالة الاستجابة رأسًا يحتوي على رأس ملف تعريف الارتباط المرسل وملفات
تعريف الارتباط الفعلية في الرأس.
الآن عندما يتلقى العميل رسالة الاستجابة من الخادم الذي يحتوي
على رأس Set-Cookie، فإنه سيتم إعداد ملف تعريف الارتباط على جانب العميل.
بحيث
يتضمن كل طلب لاحق من جانب العميل بشكل صريح حقل رأس يسمى ملف تعريف الارتباط
والرأس الفعلي الذي يحتوي على قيمة،
معلومات ملف تعريف الارتباط التي تم إرسالها من قبل الخادم في رسالة الاستجابة.
لذلك ستحمل كل رسالة طلب لاحقة ملف تعريف الارتباط هذا في الرأس.
وبالتالي عندما يتلقى الخادم رسالة الطلب هذه، فإنه قادر على فحص
ملف تعريف الارتباط وsurmise الذي يأتي منه هذا الطلب.
لذلك فهي قادرة على التعرف على العميل من خلال النظر في معلومات ملف تعريف الارتباط.
لذلك هذا هو المكان الذي تثبت فيه ملفات تعريف الارتباط مفيدة للغاية في
القدرة على إرسال معلومات التفويض.
لذلك في خدمة بما في ذلك اسم المستخدم وكلمة المرور كجزء من
رأس المصادقة الأساسية في كل طلب مستمر.
في المرة الأولى التي تقوم فيها بمصادقة نفسك، تقوم بإرسال اسم المستخدم وكلمة المرور الخاصة بك
ويقوم الخادم بإعداد ملف تعريف الارتباط على جانبك. في
وقت لاحق، تحتاج فقط إلى تضمين ملف تعريف الارتباط في الطلب الصادر.
الآن يمكن أن يكون لملفات تعريف الارتباط تاريخ انتهاء الصلاحية المرتبطة بها.
وبالتالي، عند هذه النقطة، سيتم اعتبار ملف تعريف الارتباط منتهية الصلاحية
ولن يكون صالحًا.
لذلك هذه هي إحدى الطرق للتحكم في المدة التي
يكون فيها التفويض صالحًا.
القادمة إلى Express نفسها، كيف يدعم Express ملفات تعريف الارتباط؟
الآن كما نفهم، يستخدم Express الكثير من البرامج الوسيطة.
هذا هو المكان الذي يأتي فيه أحد الوسيطة التي تأتي تسمى محلل ملفات تعريف الارتباط
إلى تطبيقنا في ثمانية.
يسمح محلل ملفات تعريف الارتباط للخادم بإعداد ملف تعريف ارتباط في رأس الاستجابة.
لذلك يتم ذلك باستخدام res.cookie والاسم
وبعض القيم والخيارات كما سنرى في التمرين لاحقًا.
وهكذا يتم
تحليل ملفات تعريف الارتباط، عندما يتم إرسالها من جانب العميل، المضمنة في رسالة الطلب هذه على جانب خادم Express، باستخدام محلل ملفات تعريف الارتباط.
الوسيطة محلل ملفات تعريف الارتباط،
والتي عند تثبيتها سوف تمكنك من تحليل ملفات تعريف الارتباط الواردة.
ثم سيتم إضافة ملفات تعريف الارتباط الواردة هذه
في الطلب كرأس ويمكن فحصها على جانب الخادم.
الآن من أجل حماية أصالة ملف تعريف الارتباط،
يمكن توقيع ملفات تعريف الارتباط نفسها من قبل الخادم.
الآن عندما يقوم الخادم بتوقيع ملف تعريف ارتباط، يستخدم الخادم مفتاحًا سريًا،
وهو معروف فقط لجانب الخادم.
الآن إذا كنت تعرف أي شيء عن أمن الكمبيوتر
والتشفير والتشفير، فإنك تفهم ما
يعنيه التوقيع والمفاتيح السرية والمفاتيح العامة وكل هذه الأشياء.
إذا لم تقم بذلك، يكفي فقط أن نقول إن المفتاح السري هو
سلسلة محددة يعرفها الخادم فقط ولا يعرفها أحد آخر.
لذلك عندما يقوم الخادم بتشفير ملف تعريف ارتباط، فإنه سيستخدم مفتاحًا
سريًا كتوقيع وإنشاء ما يسمى برمز مصادقة رسالة تجزئة المفتاح.
ويتضمن هذا في ملف تعريف الارتباط الذي يتم إرساله من الخادم إلى جانب العميل.
لا يمكن إجراء هذا HMAC الذي تم إنشاؤه على جانب الخادم إلا
بواسطة ذلك الخادم المحدد الذي يعرف هذا المفتاح السري.
الآن، بما أن الخادم هو مورد محمي، لذلك
فقط الخادم سوف تعرف المفتاح السري ولذلك فمن السهل جدا للتحقق
عندما يتم إرسال ملف تعريف ارتباط موقعة من جانب العميل إلى جانب الخادم.
لذلك عندما يتم إرسال ملف تعريف الارتباط الموقّع من جانب العميل إلى جانب الخادم،
سيتم إعداد ملف تعريف الارتباط على جانب العميل،
ومن ثم ستتضمن جميع الطلبات اللاحقة ملف تعريف الارتباط الموقّع هذا في جانب العميل.
الآن البرامج الوسيطة محلل ملفات تعريف الارتباط التي قمنا بإعدادها مع خادم Express لدينا
تدعم بالفعل ملفات تعريف الارتباط الموقعة.
الآن لهذا، في محلل ملفات تعريف الارتباط، ستقوم أيضًا بتوفير المفتاح السري
كمعلمة للمحلل اللغوي الكوكيز عند إعداد الوسيطة محلل ملفات تعريف الارتباط.
وبالتالي، سيتم توقيع جميع ملفات تعريف الارتباط بشكل مناسب ومن ثم إرسالها.
وعندما يتم تحليل ملف تعريف الارتباط على جانب الخادم في
رسالة الطلب الواردة، سيتم إضافة هذا إلى رسالة الطلب كـ Req.SignedCookies.
وبعد ذلك يمكن أن يكون لديك حقل معين يمكنك التحقق من ملف تعريف الارتباط الموقع.
ملفات تعريف الارتباط هي طريقة مفيدة جدا
لعميلك لتكون قادرة على إرسال المعلومات حيث الخادم الخاص بك يتعرف على العميل.
ولكن بالطبع، ملفات تعريف الارتباط لها قيود.
وهي حجم ثابت، لذلك لا يمكن ترميز الكثير من المعلومات
حول العميل التي يمكن لخادمها استرجاعها من ملف تعريف الارتباط.
يتم استخدام ملف تعريف الارتباط فقط لتذكير الخادم حول
العميل الذي يرسل الطلب.
الآن إذا كنت تريد أن يكون لديك آلية أكثر تفصيلا لتتبع المعلومات حول
عميل، ثم على جانب الخادم يمكنك إعداد ما يسمى الجلسات.
الآن، الجلسات هي آلية عامة متوفرة مع أي خوادم. على
وجه الخصوص، سنلقي نظرة على Express نفسه
وكيف يدعم Express إدارة الجلسة على جانب الخادم.
الطريقة التي يعمل بها هي أن يتم إعداد جلسة المستخدم على جانب الخادم.
لذا فإن هذه الجلسة نفسها عبارة عن مزيج من ملف تعريف
ارتباط ومعرف جلسة العمل، ويقوم جانب الخادم بتتبع المعلومات
المرتبطة بمعرف الجلسة هذا، أو مفهرسة بواسطة معرف الجلسة هذا.
يمكن أن تحتوي معلومات جلسة العمل نفسها على أي
كمية من المعلومات التي يتم تتبعها على جانب الخادم، وفهرستها بواسطة ملف تعريف الارتباط هذا.
لذلك عندما يرسل العميل طلبًا عبر الخادم،
يتم استرداد معرف الجلسة من داخل ملف تعريف الارتباط ويتم استخدامه كفهرس في جانب الخادم.
على سبيل المثال،
إذا كنت تستخدم قاعدة بيانات جانب الخادم، فسيكون هذا الفهرس هو الفهرس الأساسي في
قاعدة البيانات الخاصة بالخادم التي تتعقب الجلسات.
وبالتالي، يمكن استرداد معلومات إضافية حول هذه الجلسة
واستخدامها من قبل الخادم الخاص بك من أجل اتخاذ قرارات حول كيفية
خدمة طلب العميل الوارد.
الآن، بشكل افتراضي، يتم تخزين جلسات العمل في الذاكرة على موقع الخادم.
الآن من الواضح أن ما يعنيه هذا هو أنه إذا تم إعادة تشغيل الخادم الخاص بك،
سيتم مسح الذاكرة الخاصة بك وبالتالي سوف تختفي جميع معلومات الجلسة تماما.
لذلك بدلاً من ذلك، ستلجأ العديد من الخوادم إلى
استخدام شكل من أشكال التخزين الدائم حيث يتم تعقب معلومات الجلسة.
يمكن إما أن يتم التخزين الدائم على جانب الخادم
من خلال نوع من تخزين الملفات.
أو حتى الاستفادة من حقيقة أن لديك بالفعل قاعدة بيانات على جانب الخادم ومن
تخزين معلومات الجلسة على جانب الخادم.
على سبيل المثال، في MongoDB نفسه.
الآن في التمرين التالي، سننظر في استخدام تخزين الملفات
لتتبع معلومات الجلسة على جانب الخادم.
جانب آخر تحتاج إلى الانتباه إليه هو حقيقة أنه إذا
كنت تواجه تطبيق خادم موزع حيث
تعمل خوادم متعددة كخادم لخدمة الطلب.
ثم يجب أن يكون خادم الموزع قادرًا على الوصول إلى معلومات جلسة العمل.
يجب أن يتمكن أي من هذه الملقمات من الوصول إلى معلومات جلسة العمل.
لذلك سوف تحتاج إلى أداة جلسات الموزع على جانب الخادم،
لتمكينك من دعم خوادم متعددة منسوخة نسخاً متماثلاً.
خصوصا هذا مفيد عندما نحاول ضمان
موثوقية تشغيل الخادم.
الآن مرة أخرى، لن نحصل على الكثير من التفاصيل حول تلك الموجودة في هذه
الدورة بالذات، سنعتمد على فهم كيفية عمل جلسات Express بشكل أساسي.
يأتي على وجه التحديد إلى Express
وكيف يتم دعم إدارة الجلسات في Express.
يستخدم Express الوسيطة جلسة العمل السريعة التي تدعم
استخدام جلسات العمل في خادم Express.
الآن قمت بتثبيت الوسيطة جلسات التعبير.
وفي التمرين، سأستخدم FileStore
كوسيلة لتخزين معلومات الجلسة بشكل دائم.
ولذا فإننا سوف تشمل أيضا وحدة عقدة مخزن ملف جلسة العمل التي
تمكننا من استخدام الملفات على جانب الخادم لتتبع معلومات الجلسة.
سنرى التفاصيل في التمرين التالي.
وبعد ذلك بمجرد أن نفعل ذلك سيتم إعداد جلستك نفسها مع
الخادم السريع الجديد من خلال الإعلان عن الوسيطة هنا كجلسة تأخذ
مجموعة معينة من الخيارات كمعلمة هنا.
تتضمن الخيارات اسم الجلسة، لذلك سنعطي معرف الجلسة
لجلسة معينة.
ثم ستقوم أيضًا بتوفير السر، وهو مفتاح سري يتم استخدامه
لترميز ملف تعريف الارتباط الموقع الذي سيتم إرساله إلى جانب العميل.
ثم أيضًا معلومات إضافية بما في ذلك SaveUninitialized، والتي
ستكون علامة يتم استخدامها وكذلك علامة resave المستخدمة.
سنلقي نظرة على بعض تفاصيل هذه الخيارات في الشريحة التالية.
لذلك يتم تحديد كل هذه الخيارات هنا.
وإذا كنت FileStore كمخزن دائم لجلساتك،
فسوف نعلن أنه أيضًا في خيارات الجلسة هناك.
لذلك هذه هي الطريقة التي سنقوم بإعداد جلسة على جانب الخادم السريع
باستخدام جلسة الوسيطة السريعة.
والوسيطة السريعة للجلسة، عندما يرسل العميل هذه المعلومات،
سيتم تحليل هذا على جانب الخادم
وهذا سيؤدي إلى إضافة خاصية تسمى جلسة إلى كائن الطلب.
لذلك سيتم الوصول إلى معلومات الجلسة هذه في
كائن الطلب كـ req.session.
وبالتالي فإن req.session سوف تحمل معلومات إضافية حول تلك الجلسة معينة
لهذا العميل معين.
الآن مرة واحدة في هذه الجلسة، يتم تحليل الطلب الوارد من خلال الوسيطة جلسة
العمل، سيتم إضافة الخاصية req.session إلى
كائن رسالة الطلب الوارد الذي يستخدم التعبير.
لذلك بعد تحليل الجلسة، ستكون خاصية الجلسة المباشرة متاحة
ويمكننا فحص ذلك أيضًا للتحقق من العميل الذي أرسل هذا الطلب.
عند إعداد كائن جلسة العمل الخاصة بهم على موقع الخادم،
كما رأينا، يمكننا إعداد خيارات مختلفة لموقع الخادم هذا.
سيكون ملف تعريف الارتباط والخيارات من ملف تعريف ارتباط معرف الجلسة والقيمة الافتراضية لملف تعريف الارتباط كما هو موضح هنا، وهو المسار: '/'،
HttpOnly: true، آمن: false، MaxAge: null.
لذلك ستكون هذه هي القيمة الافتراضية لملف تعريف الارتباط الذي سيتم تخزينه على الحزمة
وإرساله إلى جانب العميل كملف تعريف ارتباط موقّع.
وسيتم تضمين هذا في كل طلب وارد من موقع العميل.
ثم genid هو الدالة التي تولد معرف الجلسة.
الافتراضي هو استخدام UUID الخاص بالخادم نفسه كمعرف عام.
ثم تقوم علامة resave، إذا كانت صحيحة، بإجبار جلسة على حفظها مرة أخرى إلى
المتجر حتى إذا لم يتم تعديلها بواسطة الطلب.
في بعض الأحيان قد
يحتوي الطلب الوارد على الحاجة إلى تعديل معلومات جلسة العمل على جانب الخادم.
وهكذا، إذا تم تعديل معلومات الجلسة، يجب أن تكون مستمرة.
إذا لم يكن كذلك، فأنت لست بحاجة إلى الاستمرار في ذلك.
ولكن إذا قمت بتعيين علامة resave إلى true، حتى إذا
لم يتم تعديل معلومات الجلسة على الخادم بواسطة طلب العميل الوارد، فسيظل يتم إعادة إرسالها.
العلم التالي الذي نظرنا إليه كان SaveUninitialized.
إذا كان هذا صحيحًا، فسيتم إنشاء جلسة تم إنشاؤها حديثًا دون أي تعديلات
ليتم حفظها في مخزن الجلسة.
الآن سنقوم بتعيين هذا إلى false افتراضيًا، مما يعني أننا لن
نتتبع سوى تلك الجلسات المصرح بها على الخادم.
الآن السر، كما نرى، هو المفتاح السري الذي يتم استخدامه لتوقيع ملف تعريف الارتباط،
والمخزن نفسه يحدد مثيل مخزن الجلسة المستخدم.
الافتراضي هو استخدام مخزن الذاكرة في.
يمكنك تحديد مخزن الملفات أو مخزن Mongo
لتخزين معلومات الجلسة هذه، وما إلى ذلك.
لذلك بمجرد تحديد هذه المعلومات لوسيطة جلسة العمل السريعة الخاصة بك،
سيتم إعداد الجلسة بشكل مناسب وبالتالي سيتم تتبعها على جانب الخادم.
سيتم بعد ذلك تعيين كل طلب عميل إلى معلومات جلسة
العمل على جانب الخادم عندما يتم تحليل طلب العميل بواسطة الوسيطة السريعة للجلسة.
وسيتم إضافة req.session إلى كائن الطلب.
مع هذا الفهم لملفات تعريف الارتباط والجلسات السريعة، دعونا
ننتقل إلى التمرين حيث سننظر في كيفية الاستفادة من ملفات تعريف الارتباط أولاً.
ثم سننظر في كيفية الاستفادة من جلسات Express Express
داخل تطبيق Express REST API الذي كنا نعمل عليه حتى الآن.
[ موسيقى]