내용

    서버 응답 401 Unauthorized

    HTTP 상태 코드 401 (Unauthorized)

    HTTP 상태 코드 401은 요청이 실패했음을 나타내며, 이는 대상 리소스에 대한 유효한 인증이 없기 때문입니다. 이 코드는 웹 개발에서 자주 발생하며, 특히 API 작업 시 개발자에게 혼란을 초래할 수 있습니다. 이 기사에서는 401 상태 코드의 발생 원인, 실용적인 예시 및 다양한 프로그래밍 언어에서의 해결 방법을 자세히 살펴보겠습니다.

    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';
    }
    ?>
    

    HTTP 401 상태 코드 요약

    위에서 설명한 바와 같이, HTTP 상태 코드 401은 인증이 필요한 리소스에 접근할 수 없음을 나타냅니다. 각 프로그래밍 언어에서 제공하는 방법으로 이 오류를 처리하고 해결하는 방법을 알아보았습니다. 이 코드를 정확히 이해하고 적절히 처리하는 것은 안전한 API 설계를 위해 필요합니다.

    상황 상태 코드 설명
    인증 데이터 누락 401 사용자가 인증 정보를 제공하지 않음
    잘못된 사용자 인증 정보 401 사용자가 잘못된 자격 증명으로 요청
    만료된 토큰 사용 401 사용자가 만료된 토큰으로 접근 시도

    추가 코드

    코드설명
    401.1로그인 실패 - 잘못된 사용자 이름 또는 비밀번호로 인해 로그인 시도가 실패했습니다.
    401.2서버 구성으로 인해 로그인 실패 - 서버의 인증 구성에 문제가 있습니다.
    401.3리소스의 ACL로 인해 권한이 없습니다. NTFS 파일 시스템 권한으로 인해 액세스가 거부되었습니다.
    401.4필터로 인해 권한이 실패했습니다. ISAPI 필터가 권한 문제로 인해 요청을 차단했습니다.
    401.5ISAPI/CGI 애플리케이션으로 인해 권한이 실패했습니다. ISAPI 또는 CGI 애플리케이션이 권한 문제로 인해 요청을 차단했습니다.
    401.501액세스 거부: 동시 요청 속도 제한에 도달했습니다. 동일한 클라이언트 IP에서 동시 요청이 너무 많습니다.
    401.502액세스 거부: 최대 요청 속도 제한에 도달했습니다. 클라이언트 IP가 지정된 시간 내에 최대 요청 수.
    401.503액세스 거부: IP 주소 거부 - 클라이언트 IP 주소가 거부 목록에 있습니다.
    401.504액세스 거부: 호스트 이름이 거부되었습니다 - 클라이언트 호스트 이름이 거부 목록에 있습니다.