العربية
  • 401
  • 403
  • رمز حالة http
  • التفويض
  • التوثيق

رمز حالة HTTP 401 أو 403؟ كيف تختلف أخطاء المصادقة والتفويض

يشير 401 غير مصرح إلى أن العميل غير مُصادق عليه، ويتطلب تقديم بيانات اعتماد صالحة. أما 403 ممنوع فيُشير إلى أن العميل مُصادق عليه ولكنه يفتقر إلى الصلاحيات اللازمة للوصول إلى المورد.

Guamian
Guamian
Product & Design

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

ما هي رموز حالة HTTP

رموز حالة HTTP هي مثل إشارات في محادثة بين العميل (مثل متصفحك أو تطبيقك) والخادم. إنها توفر تحديثات سريعة وواضحة حول ما حدث عند إرسال طلب - سواء سار كل شيء بسلاسة، أو وقع خطأ ما، أو كانت هناك حاجة إلى إجراء إضافي. دعونا نفكر في الأمر كزيارة إلى مخبز مُدار بشكل جيد:

200: كل شيء مثالي

تطلب كرواسون، ويبتسم الخباز ويسلمه لك ويقول: "ها هو!" هذه هي HTTP 200 OK - تم نجاح الطلب وعمل كل شيء كما هو متوقع.

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

301: لقد انتقلنا

تصل إلى مخبزك المفضل، لكن هناك لافتة تقول: "لقد انتقلنا إلى 123 شارع نيو". هذا هو 301 Moved Permanently. يُخبر الخادم متصفحك بالانتقال إلى العنوان الجديد تلقائيًا.

رمز حالة HTTP 301 Moved Permanently يشير إلى أن المورد المطلوب قد تم نقله بشكل دائم إلى عنوان URL جديد. هذا الرمز يُعلم العميل (على سبيل المثال، المتصفح أو عميل API) بتحديث سجلاته واستخدام عنوان URL الجديد للطلبات المستقبلية.

404: عذرًا، ليس هنا

تطلب كعك الشوكولاتة، ويقول الخباز: "لا نصنع تلك هنا." هذا هو 404 Not Found - المورد الذي تبحث عنه ليس موجودًا على الخادم.

رمز حالة HTTP 404 Not Found يشير إلى أن الخادم لم يتمكن من العثور على المورد المطلوب. هذا الرد يعني أن طلب العميل كان صالحًا، لكن الخادم لم يتمكن من تحديد موقع المورد الذي طُلب.

401: من أنت؟

تحاول دخول صالة الشخصيات المهمة، لكن الحارس يوقفك ويقول: "عليك أن تُظهر بطاقة عضويتك." هذا هو 401 Unauthorized - يلزم المصادقة قبل أن تتمكن من الوصول إلى المورد.

رمز حالة HTTP 401 Unauthorized يشير إلى أن طلب العميل لم يتم تطبيقه لأنه يفتقر إلى بيانات اعتماد المصادقة الصالحة. يتطلب الخادم من العميل إثبات هويته للوصول إلى المورد المطلوب.

403: ليس لك

تُظهر بطاقة عضويتك، لكن الحارس يقول: "فقط الأعضاء البلاتينيين يمكنهم الدخول." هذا هو 403 Forbidden - أنت مُصادق ولكن ليس لديك الصلاحيات اللازمة للوصول إلى المورد.

رمز حالة HTTP 403 Forbidden يشير إلى أن الخادم يفهم طلب العميل ولكنه يرفض تلبيته لأن العميل لا يمتلك الصلاحيات اللازمة. هذا يختلف عن حالة 401 Unauthorized، حيث يكون العميل مُصادقًا (أو لا يتطلب الطلب المصادقة)، ولكن الوصول إلى المورد يُمنع بشكل صريح.

500: الفرن يحترق

تضع طلبًا، لكن فجأة يبدأ الدخان في التصاعد من المطبخ. يقول الخباز: "لا يمكننا تلبية طلبك؛ حدث خطأ داخلي." هذا هو 500 Internal Server Error - واجه الخادم مشكلة غير متوقعة.

رمز حالة HTTP 500 Internal Server Error يشير إلى أن الخادم واجه حالة غير متوقعة منعته من تلبية الطلب. إنه استجابة خطأ عامة ولا يوفر تفاصيل محددة حول ما حدث خطأ.

503: غير متاح حاليًا

تزور المخبز، لكن هناك لافتة تقول "مغلق للصيانة". سيتم إعادة فتح المخبز لاحقًا. هذا هو 503 Service Unavailable - الخادم غير قادر مؤقتًا على تلبية طلبك، عادةً بسبب التحميل الزائد أو الصيانة.

رمز حالة HTTP 503 Service Unavailable يشير إلى أن الخادم غير قادر مؤقتًا على معالجة الطلب. قد يكون ذلك بسبب التحميل الزائد على الخادم، أو الصيانة، أو ظروف مؤقتة أخرى. على عكس 500 Internal Server Error، يشير 503 إلى أنه من المتوقع حل المشكلة قريبًا.

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

فكر فيها كإشارات احترافية وموحدة في المحادثة المستمرة على الإنترنت.

في هذه المقالة، أود التركيز على أخطاء 401 و 403، لأنها ترتبط ارتباطًا وثيقًا بالتوثيق (AuthN) والتفويض (AuthZ).

متى يجب استخدام 401 Unauthorized؟

401.png

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

401 unauthorized يجب أن يتضمن رأس WWW-Authenticate، الذي يوفر تفاصيل حول كيفية التوثيق.

إذاً، ما هي السيناريوهات الشائعة لاستخدام 401 Unauthorized؟

  1. المصادقة مفقودة

    لا يتضمن الطلب بيانات اعتماد المصادقة المطلوبة. على سبيل المثال: يتم إجراء طلب لنقطة نهاية API محمية بدون رأس Authorization.

  2. بيانات اعتماد التوثيق غير صالحة

    يوفر العميل بيانات اعتماد، لكنها غير صحيحة أو لا تتطابق مع ما يتوقعه الخادم. على سبيل المثال، يُرسل مستخدم مفتاح API غير صالح أو رمز مشوه.

  3. انتهاء صلاحية رمز التوثيق

    رمز التوثيق صالح ولكنه منتهي الصلاحية، مما يتطلب من العميل إعادة المصادقة. على سبيل المثال، رمز JWT مع تاريخ انتهاء صلاحية سابق (الادعاء exp).

  4. رأس التوثيق مفقود أو مشوه

    يُطلب رأس التوثيق ولكنه إما غير متوفر أو ذو صيغة غير صحيحة.

  5. نظام التوثيق غير مدعوم

    الخادم لا يدعم الطريقة التي يوفرها العميل للتوثيق. على سبيل المثال: يُرسل العميل رأس مصادقة أساسي، لكن الخادم يدعم فقط رموز Bearer.

  6. جلسة غير صالحة أو إبطال الرمز

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

مثال على رد

متى يجب استخدام 403 Forbidden؟

403.png

رمز حالة HTTP 403 Forbidden يعني أن الخادم يفهم الطلب وهوية العميل (إذا تم التوثيق) ولكنه يرفض الوصول بسبب الصلاحيات غير الكافية. يوضح بشكل واضح، "لا يُسمح لك بفعل ذلك،" مما يضمن حدود وصول واضحة ويعزز سياسات الأمان.

الفرق بين 401 Unauthorized و 403 Forbidden يكمن في أدوارهما ضمن سياقات التوثيق والتفويض.

التفويض آلية منفصلة عن التوثيق. بينما يحدد التوثيق هويتك، يحدد التفويض ما إذا كان بإمكانك الوصول إلى موارد معينة وما الإجراءات التي يمكن القيام بها عليها.

للتحقق من الفرق التفصيلي بين AuthN و AuthZ، قم بالتحقق من المقالات التالية.

ما هو AuthZ

ما هو AuthN

إذاً، ما هي السيناريوهات الشائعة لاستخدام 403 Forbidden؟

  1. مصدق عليه لكن لا يمتلك الإذن

    العميل مسجل الدخول أو مُصادق عليه ولكنه لا يمتلك الصلاحيات أو الدور المطلوب. على سبيل المثا للحصول على دور "مُشاهد" يحاول حذف ملف، مما يتطلب امتيازات "محرر".

  2. وصول المورد مقيد

    تم حظر الوصول إلى المورد بشكل متعمد لمستخدمين أو مجموعات محددة. على سبيل المثال: يتم مشاركة مستند خاص مع مستخدمين محددين ويصل إليه شخص غير موجود في قائمة الوصول.

  3. حظر IP أو الموقع الجغرافي

    يتم حظر عنوان IP للعميل أو موقعه الجغرافي بواسطة الخادم. على سبيل المثال: يحاول مستخدم من منطقة محظورة الوصول إلى خدمة تعمل فقط في دول معينة.

  4. حظر الأفعال بواسطة السياسات

    يحاول العميل القيام بإجراء محظور بواسطة سياسات أو قواعد الخادم. على سبيل المثال: يحاول مستخدم تعديل مورد تم وضع علامة عليه كـ "قراءة فقط".

  5. حظر الموارد الثابتة

    يرفض الخادم الوصول إلى ملفات أو أدلة ثابتة محددة لأسباب أمنية.

    مثال: يحاول مستخدم الوصول إلى ملف .htaccess أو ملف تكوين الخادم.

  6. الحساب معلق أو معطل

    حساب العميل معطل أو محظور بسبب انتهاكات أو خمول. على سبيل المثال: يحاول مستخدم ذو حساب معلق تسجيل الدخول أو الوصول إلى الموارد.

  7. الإجراء يتطلب صلاحيات مرتفعة

    الإجراء المطلوب يتطلب امتيازات خاصة (مثل، مشرف أو مستخدم متميز). على سبيل المثال: يحاول مستخدم عادي الوصول إلى نقاط النهاية المخصصة للمسؤولين فقط.

مثال على الرد:

كيف يمكنني تشخيص خطأ 401 غير مصرح

عادةً ما يشير خطأ 401 إلى أن المصادقة مطلوبة وفشلت.

تحقق من بيانات الاعتماد

تأكد من وجود رأس التفويض ومن صياغته بشكل صحيح وتحقق من أن بيانات الاعتماد (مفتاح API أو الرمز أو كلمة المرور) صحيحة ولم تنتهي صلاحيتها. يعد إدخال اسم مستخدم أو كلمة مرور خاطئة أحد الأسباب الأكثر شيوعًا لخطأ 401.

تأكيد طريقة التوثيق

قد يتوقع الخادم طريقة توثيق مختلفة عما يُقدمه العميل. يمكن أن يحدث ذلك إذا لم يكن العميل والخادم متفقين على بروتوكول التوثيق. استخدم الطريقة الصحيحة (مثل، Basic، Bearer، مفتاح API) كما هو محدد بواسطة الخادم وتحقق من الصياغة الصحيحة في الرؤوس.

فحص استجابة الخادم

راجع جسم الاستجابة للحصول على تفاصيل الخطأ وانظر إلى رأس WWW-Authenticate للحصول على تعليمات التوثيق.

تحقق من الطلب

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

تحقق من مشكلات الرمز

قم بفك شفرة الرمز وفحصه (مثل، باستخدام https://logto.io/jwt-decoder) للتحقق من صلاحيته وانتهائه وادعاءاته وقارن جمهور الرمز (aud) بمتطلبات API.

كيف يمكنني تشخيص خطأ 403 الممنوع

عادةً ما يعني الخطأ 403 الممنوع أن عملية التفويض قد اكتملت، لكن الوصول تم رفضه. لتشخيص هذا الخطأ، ضع في اعتبارك الحالات التالية:

التحقق من الأذونات

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

تأكد من صحة المصادقة

تأكد من أنك مُصادق عليه بشكل صحيح (على سبيل المثال، برمز أو بيانات اعتماد صالحة).

قم بمراجعة طريقة التوثيق المطلوبة بواسطة الخادم.

التحقق من المورد

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

ابحث عن حجب IP أو الموقع

تحقق مما إذا كان عنوان IP الخاص بك أو موقعك الجغرافي مقيدًا بواسطة الخادم.

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

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

فحص استجابة الخادم

افحص جسم الاستجابة للحصول على تفاصيل توضح سبب الخطأ 403.

هل يمكن أن تعيد عملية طلب واحدة كلا من 401 و 403 رموز الحالة

لا، لا يمكن لطلب HTTP واحد أن يعيد كلا من رموز حالة 401 Unauthorized و 403 Forbidden في نفس الوقت لأن استجابة HTTP يمكن أن تتضمن رمز حالة واحد فقط.

الاستخدام العملي لرموز الخطأ 401 و 403 في التوثيق والتفويض

في تطوير التطبيقات الحديثة، 401 Unauthorized و 403 Forbidden هما رموز حالة HTTP يواجهها المطورون بشكل متكرر. بينما قد تبدو متشابهة، فإن معانيها وحالات الاستخدام الخاصة بها تختلف بوضوح. لتوضيح فروقاتها، تستكشف هذه المقالة أمثلة عملية لهذين الرمزين في سيناريوهات مثل التوثيق، التفويض، وتعدد المستأجرين، والمصادقة متعددة العوامل (MFA).

  1. سيناريو تسجيل الدخول: يحاول مستخدم الوصول إلى صفحة محمية بدون تسجيل دخول أو تقديم بيانات اعتماد صالحة. يستجيب الخادم ويرسل خطأ 401 Unauthorized: "عليك تسجيل الدخول أو تقديم بيانات اعتماد صالحة للوصول إلى هذه الصفحة."
  2. سيناريو التحكم في الوصول: يقوم نفس المستخدم بتسجيل الدخول بنجاح لكن يحاول الوصول إلى صفحة خاصة بالمسؤول بدون الحصول على دور مسؤول. يستجيب الخادم ويرسل خطأ 403 Forbidden: "لقد قمت بتسجيل الدخول، لكن ليس لديك إذن للوصول إلى هذه الصفحة."
  3. سيناريو تعدد المستأجرين: يقوم نفس المستخدم بتسجيل الدخول لكنه ينتمي إلى المستأجر A ويحاول الوصول إلى مورد في المستأجر B حيث لا يملك وصولًا. يستجيب الخادم ويرسل خطأ 403 Forbidden: "أنت مُصادق، لكن ليس لديك إذن للوصول إلى هذا المورد في المستأجر B."
  4. سيناريو MFA: يحاول مستخدم تسجيل الدخول لكنه لم يكمل المصادقة متعددة العوامل (MFA) المطلوبة. يستجيب الخادم ويرسل خطأ 401 Unauthorized: "المصادقة غير مكتملة. يرجى إكمال MFA للمتابعة."

استخدام Logto كمزود لتوثيق المستخدم والتفويض

Logto هو مزود توثيق بشكل رئيسي، يوفر طرق أساسية مثل تسجيل الدخول بدون كلمة مرور، البريد الإلكتروني وكلمة المرور، MFA، SSOs المؤسسي، وتسجيل دخول عبر وسائل التواصل الاجتماعي، كل ذلك على أساس بروتوكولات قياسية مفتوحة مثل OIDC، OAuth 2.0، و SAML.

كما يقدم Logto Cloud ميزات التفويض الأساسية، بما في ذلك التحكم في الوصول المعتمد على الدور (RBAC)، المنظمات (تعدد المستأجرين)، و المطالبات المخصصة للرموز لتلبية مجموعة متنوعة من احتياجات التفويض.