استجابة الخادم 401 Unauthorized
رمز الحالة HTTP 401 (غير مصرح)
يشير رمز الحالة HTTP 401 (غير مصرح) إلى أن الطلب لم يتم تطبيقه لأن بيانات المصادقة الصالحة مفقودة للموارد المستهدفة. يُستخدم هذا الرمز بشكل شائع في تطوير الويب وقد يسبب سوء فهم بين المطورين، خاصة عند العمل مع واجهات برمجة التطبيقات (APIs). في هذه المقالة، سنستعرض الأسباب العملية لظهور هذا الرمز، بالإضافة إلى طرق تصحيحه في لغات برمجة مختلفة.
أسباب ظهور الرمز 401
- غياب بيانات المصادقة
- بيانات الاعتماد غير الصحيحة
- انتهاء صلاحية الرموز المميزة للدخول
- تنسيق غير صحيح لرؤوس المصادقة
أمثلة عملية
-
مثال 1: خطأ عند محاولة الوصول إلى مورد محمي
الوصف: يحاول المستخدم الوصول إلى واجهة برمجة تطبيقات تتطلب مصادقة، لكنه لا يقدم أي بيانات اعتماد.
السلوك المتوقع: يقوم الخادم بإرجاع حالة 401.
-
مثال 2: بيانات اعتماد غير صحيحة
الوصف: يرسل المستخدم طلبًا مع اسم مستخدم وكلمة مرور خاطئة.
السلوك المتوقع: يقوم الخادم بإرجاع حالة 401 مع رسالة تفيد بفشل المصادقة.
-
مثال 3: استخدام رمز مميز منتهي الصلاحية
الوصف: يحاول المستخدم استخدام رمز مميز انتهت صلاحيته.
السلوك المتوقع: يقوم الخادم بإرجاع حالة 401 مع طلب لتحديث الرمز.
طرق تصحيح خطأ 401 في لغات البرمجة المختلفة
JavaScript (Node.js)
معالجة المصادقة باستخدام مكتبة jsonwebtoken
.
const jwt = require('jsonwebtoken');
app.get('/protected', (req, res) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Unauthorized');
}
jwt.verify(token, 'secret_key', (err, user) => {
if (err) {
return res.status(401).send('Unauthorized');
}
res.send('Access granted');
});
});
Python (Flask)
استخدام مكتبة Flask
للتحقق من بيانات الاعتماد.
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/protected')
def protected():
auth = request.authorization
if not auth or not (auth.username == 'user' and auth.password == 'pass'):
return jsonify({'message': 'Unauthorized'}), 401
return jsonify({'message': 'Access granted'})
PHP
معالجة المصادقة باستخدام الرؤوس.
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
exit;
} else {
if ($_SERVER['PHP_AUTH_USER'] !== 'user' || $_SERVER['PHP_AUTH_PW'] !== 'pass') {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
exit;
}
echo 'Access granted';
}
?>
جدول ملخص أسباب ظهور حالة 401
السبب | الوصف |
---|---|
غياب بيانات المصادقة | لم يتم تقديم أي بيانات اعتماد مع الطلب. |
بيانات الاعتماد غير الصحيحة | تم تقديم اسم مستخدم أو كلمة مرور خاطئة. |
انتهاء صلاحية الرموز المميزة | تم استخدام رمز مميز لم يعد صالحًا. |
تنسيق غير صحيح | توجد مشكلة في تنسيق رؤوس المصادقة. |
تناولنا في هذه المقالة معنى رمز الحالة 401 (غير مصرح)، وأسباب ظهوره، بالإضافة إلى أمثلة عملية وطرق تصحيحه في لغات البرمجة المختلفة. فهم هذه الحالة يمكن أن يساعد المطورين في تحسين تطبيقاتهم وضمان تجربة مستخدم أفضل.
رموز إضافية
الرمز | الوصف |
---|---|
401.1 | فشل تسجيل الدخول - فشل محاولة تسجيل الدخول بسبب اسم مستخدم أو كلمة مرور غير صحيحة. |
401.2 | فشل تسجيل الدخول بسبب تكوين الخادم - هناك مشكلة في تكوين المصادقة على الخادم. |
401.3 | غير مصرح به بسبب ACL على المورد - تم رفض الوصول بسبب أذونات نظام ملفات NTFS. |
401.4 | تم حظر التفويض بواسطة الفلتر - قام فلتر ISAPI بحظر الطلب بسبب مشكلات التفويض. |
401.5 | تم حظر التفويض بواسطة تطبيق ISAPI/CGI - قام تطبيق ISAPI أو CGI بحظر الطلب بسبب مشكلات التفويض. |