Contents

    Server response 401 Unauthorized

    HTTP สถานะโค้ด 401 (Unauthorized)

    รหัสสถานะ HTTP 401 (Unauthorized) เป็นการระบุว่าคำขอไม่ได้ถูกนำไปใช้เนื่องจากไม่มีการพิสูจน์ตัวตนที่ถูกต้องสำหรับทรัพยากรที่ต้องการ รหัสนี้มักเกิดขึ้นในงานพัฒนาเว็บและอาจทำให้เกิดความเข้าใจผิดในหมู่นักพัฒนา โดยเฉพาะเมื่อทำงานกับ API ในบทความนี้ เราจะสำรวจสาเหตุที่ทำให้เกิดสถานะนี้ พร้อมกับตัวอย่างการเกิดปัญหาและวิธีแก้ไขในหลายภาษาโปรแกรมมิ่ง

    401 - Unauthorized

    สาเหตุที่ทำให้เกิดสถานะ 401

    • ไม่มีข้อมูลการพิสูจน์ตัวตน
    • ข้อมูลประจำตัวไม่ถูกต้อง
    • โทเคนการเข้าถึงหมดอายุ
    • รูปแบบของส่วนหัวการพิสูจน์ตัวตนไม่ถูกต้อง

    ตัวอย่างการเกิดปัญหา

    1. ตัวอย่างที่ 1: ข้อผิดพลาดเมื่อพยายามเข้าถึงทรัพยากรที่ป้องกัน

      คำอธิบายสถานการณ์: ผู้ใช้พยายามเข้าถึง API ที่ต้องการการพิสูจน์ตัวตน แต่ไม่ได้ให้ข้อมูลประจำตัวใดๆ

      พฤติกรรมที่คาดหวัง: เซิร์ฟเวอร์ส่งกลับสถานะ 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 (Unauthorized) เป็นสิ่งสำคัญในการพัฒนา API ที่ปลอดภัย การตรวจสอบสาเหตุที่ทำให้เกิดสถานะนี้และการประยุกต์ใช้แนวทางแก้ไขที่เหมาะสมในแต่ละภาษาโปรแกรมมิ่ง จะช่วยลดปัญหาที่อาจเกิดขึ้นในอนาคตและทำให้ผู้ใช้สามารถเข้าถึงทรัพยากรได้อย่างถูกต้องและปลอดภัย

    รหัสเพิ่มเติม

    รหัสคำอธิบาย
    401.1การเข้าสู่ระบบล้มเหลว - ความพยายามเข้าสู่ระบบล้มเหลวเนื่องจากชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง
    401.2การเข้าสู่ระบบล้มเหลวเนื่องจากการกำหนดค่าเซิร์ฟเวอร์ - มีปัญหาในการกำหนดค่าการรับรองความถูกต้องบนเซิร์ฟเวอร์
    401.3ไม่ได้รับอนุญาตเนื่องจาก ACL บนทรัพยากร - ปฏิเสธการเข้าถึงเนื่องจากสิทธิ์ของระบบไฟล์ NTFS
    401.4การอนุญาตล้มเหลวโดยตัวกรอง - ตัวกรอง ISAPI บล็อกคำขอเนื่องจากปัญหาการอนุญาต
    401.5การอนุญาตล้มเหลวโดยแอปพลิเคชัน ISAPI/CGI - แอปพลิเคชัน ISAPI หรือ CGI บล็อกคำขอเนื่องจากปัญหาการอนุญาต
    401.501ปฏิเสธการเข้าถึง: ขีดจำกัดอัตราการร้องขอพร้อมกันถึง - มากเกินไป คำขอพร้อมกันจาก IP ไคลเอนต์เดียวกัน
    401.502ปฏิเสธการเข้าถึง: ขีดจำกัดอัตราการร้องขอสูงสุด - IP ไคลเอนต์เกินจำนวนคำขอสูงสุดในเวลาที่ระบุ
    401.503ปฏิเสธการเข้าถึง: ที่อยู่ IP ปฏิเสธ - ที่อยู่ IP ไคลเอนต์อยู่ในรายการปฏิเสธ
    401.504ปฏิเสธการเข้าถึง: ชื่อโฮสต์ปฏิเสธ - ชื่อโฮสต์ไคลเอนต์อยู่ในรายการปฏิเสธ