المحتويات

    استجابة الخادم 401 Unauthorized

    رمز الحالة HTTP 401 (غير مصرح)

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

    401 - Unauthorized

    أسباب ظهور الرمز 401

    • غياب بيانات المصادقة
    • بيانات الاعتماد غير الصحيحة
    • انتهاء صلاحية الرموز المميزة للدخول
    • تنسيق غير صحيح لرؤوس المصادقة

    أمثلة عملية

    1. مثال 1: خطأ عند محاولة الوصول إلى مورد محمي

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

      السلوك المتوقع: يقوم الخادم بإرجاع حالة 401.

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

      الوصف: يرسل المستخدم طلبًا مع اسم مستخدم وكلمة مرور خاطئة.

      السلوك المتوقع: يقوم الخادم بإرجاع حالة 401 مع رسالة تفيد بفشل المصادقة.

    3. مثال 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 بحظر الطلب بسبب مشكلات التفويض.