Ultimate magazine theme for WordPress.

كيفية إعداد مصادقة HTTP الأساسية في NGINX – CloudSavvy IT

1

شعار Nginx.

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

كيف تعمل مصادقة HTTP؟

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

عندما يحاول مستخدم الوصول إلى مورد محمي ، يرسل الخادم المستخدم WWW-Authenticate رأس جنبا إلى جنب مع 401 Unauthorized استجابة. يرسل العميل اسم المستخدم وكلمة المرور المناسبين ، المخزنين في Authorization رأس الصفحة ، وإذا تطابق مع ملف مفتاح ، يُسمح لهم بالاتصال.

نظرًا لأن مصادقة HTTP الأساسية تتطلب إرسال كلمات مرور عبر الأسلاك ، فأنت بحاجة إلى إعداد HTTPS / TLS على خادمك ، وإلا فإن أي شخص في المنتصف يمكنه التعرف على كلمة مرور النص العادي. سيقوم HTTPS بتشفير الاتصال ، مما يجعله آمنًا للإرسال. يمكنك إعداد شهادة مجانية مع LetsEncrypt ، أو إذا كنت تبحث عن تأمين خادم خاص ، فقم بإنشاء وتوقيع واحد بنفسك.

المصادقة الأساسية لاسم المستخدم / كلمة المرور ليست سوى واحدة من العديد من أنظمة المصادقة ؛ مخطط شائع آخر هو الرموز المميزة لحاملها ، والتي تُستخدم لتدفقات OAuth 2.0. يمكنك استخدام هذا المخطط مع Nginx باستخدام وحدة JSON Web Tokens ، ولكن الإعداد الكامل أكثر تعقيدًا بكثير من مصادقة اسم المستخدم / كلمة المرور.

قم بإنشاء ملف كلمة مرور

يمكنك استخدام ال htpasswd لإنشاء ملفات كلمة المرور. من المحتمل أن يكون هذا مثبتًا بالفعل على نظامك ، ولكن إذا لم يكن كذلك ، فيمكنك تثبيته من apache2-utils صفقة. (يستخدم Nginx نفس تنسيق كلمة المرور المستخدم في Apache):

sudo apt-get install apache2-utils

قم بإنشاء ملف كلمة مرور جديد عن طريق التشغيل htpasswd مع ال -c الإبلاغ ، في هذه الحالة ، للمستخدم “المشرف”:

sudo htpasswd -c /etc/nginx/.htpasswd admin

سيُطلب منك إدخال كلمة مرور سيتم تجزئتها وتخزينها /etc/nginx/.htpasswd. إذا كنت ترغب في إضافة عدة مستخدمين ، فاترك -c ضع علامة لإضافة إدخالات جديدة.

قم بتشغيل مصادقة HTTP الأساسية

يمكنك حماية أي طريق في nginx باستخدام auth_basic التوجيه داخل الموقع. على سبيل المثال ، لحماية كلمة المرور /admin، يمكنك وضع كتلة الموقع هذه داخل كتلة الخادم في ملف التكوين nginx الرئيسي (الموجود عادةً في /etc/nginx/nginx.conf):

location /admin {
  try_files $uri $uri/ =404;
  auth_basic "Restricted Content";
  auth_basic_user_file /etc/nginx/.htpasswd;
}

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

يجب أن تتعامل Nginx مع الباقي لك. أعد التشغيل لتطبيق التغييرات:

sudo service nginx restart

وتحقق من المسار المحمي في متصفحك. ستتم مطالبتك بكلمة مرور ، وتم رفض الوصول إذا لم تتمكن من توفيرها.

استخدام مصادقة الوكيل

إحدى حالات الاستخدام الشائعة للمصادقة الأساسية هي تأمين مورد خارجي باستخدام وكيل nginx عكسي. هذا يعمل بشكل مثالي مع auth_basic، وهي بسيطة مثل استخدام الاثنين معًا:

location / {
  #//turn on auth for this location
  auth_basic "Restricted Content";
  auth_basic_user_file /etc/nginx/.htpasswd;

  #//normal proxy configuration
  proxy_http_version 1.1;
  proxy_pass_request_headers on;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Accept-Encoding "";

  proxy_pass https://<ip-address>;
  proxy_redirect default;
}

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

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

ستحتاج إلى استخدام وحدة مزيد من الرؤوس لتتمكن من تعديل الرؤوس بشكل مباشر أكثر:

location / {
  proxy_http_version 1.1;
  proxy_pass_request_headers on;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Accept-Encoding "";

  proxy_pass https://<ip-address>;
  proxy_redirect default;

  more_set_input_headers 'Authorization: $http_authorization';
  more_set_headers -s 401 'WWW-Authenticate: Basic realm="your_server.com"';
}

تكوين الوكيل هو نفسه ، باستثناء أنه مفقود auth_basic لأننا لا نريد إجراء المصادقة باستخدام nginx. ال more_set_input_headers التوجيه هو القيام بالسحر هنا ، وتعيين الرأس عندما يتواصل مع خادم الويب لتضمين $http_authorization متغير حصلت عليه من العميل. بهذه الطريقة يتم تمرير اسم المستخدم وكلمة المرور من خلال nginx إلى الواجهة الخلفية.

السطر التالي أكثر تعقيدًا ؛ الطريقة العادية لضبط الرؤوس ستستبدل realm متغير عندما يتم تحويله عبر nginx ، وهو ليس مثاليًا. باستخدام more_set_headers ستحافظ على هذا وتظهر المعلومات الصحيحة للعميل.

اترك رد

لن يتم نشر عنوان بريدك الإلكتروني.