Zawartość

    Odpowiedź serwera 401 Unauthorized

    HTTP Status 401 (Unauthorized)

    HTTP status code 401 (Unauthorized) wskazuje, że żądanie nie zostało zrealizowane z powodu braku ważnych danych uwierzytelniających dla danego zasobu. Ten kod często występuje w kontekście aplikacji internetowych i może prowadzić do nieporozumień wśród programistów, zwłaszcza podczas pracy z API. W tej artykule szczegółowo omówimy powody wystąpienia tego statusu oraz sposoby jego naprawy w różnych językach programowania.

    401 - Unauthorized

    Przyczyny wystąpienia statusu 401

    • Brak danych uwierzytelniających
    • Błędne dane logowania
    • Wygasłe tokeny dostępu
    • Niewłaściwy format nagłówków uwierzytelniających

    Praktyczne przykłady

    1. Przykład 1: Błąd podczas próby dostępu do chronionego zasobu

      Opis sytuacji: Użytkownik próbuje uzyskać dostęp do API, które wymaga uwierzytelnienia, ale nie dostarcza żadnych danych logowania.

      Oczekiwane zachowanie: Serwer zwraca status 401.

    2. Przykład 2: Błędne dane logowania

      Opis sytuacji: Użytkownik wysyła żądanie z niepoprawnym loginem i hasłem.

      Oczekiwane zachowanie: Serwer zwraca status 401 z komunikatem o nieudanej autoryzacji.

    3. Przykład 3: Użycie wygasłego tokena

      Opis sytuacji: Użytkownik próbuje użyć tokena, który wygasł.

      Oczekiwane zachowanie: Serwer zwraca status 401 z prośbą o odnowienie tokena.

    Sposoby naprawy błędu 401 w różnych językach programowania

    Język programowania Opis Przykład kodu
    JavaScript (Node.js) Obsługa uwierzytelniania za pomocą biblioteki 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) Użycie biblioteki Flask do weryfikacji danych uwierzytelniających.
    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 Obsługa uwierzytelniania przy użyciu nagłówków.
    <?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';
    }
    ?>

    W tej artykule omówiliśmy, co oznacza status kod 401 (Unauthorized), jego przyczyny oraz praktyczne przykłady. Przedstawiliśmy także sposoby obsługi i naprawy tego statusu w różnych językach programowania, co powinno pomóc w lepszym zrozumieniu tego problemu i jego rozwiązania.

    Dodatkowe kody

    KodOpis
    401.1Niepowodzenie logowania - Próba logowania nie powiodła się z powodu niepoprawnej nazwy użytkownika lub hasła.
    401.2Niepowodzenie logowania z powodu konfiguracji serwera - Wystąpił problem z konfiguracją uwierzytelniania na serwerze.
    401.3Brak autoryzacji z powodu ACL na zasobie - Dostęp został odmówiony ze względu na uprawnienia systemu plików NTFS.
    401.4Autoryzacja odrzucona przez filtr - Filtr ISAPI zablokował żądanie z powodu problemów z autoryzacją.
    401.5Autoryzacja odrzucona przez aplikację ISAPI/CGI - Aplikacja ISAPI lub CGI zablokowała żądanie z powodu problemów z autoryzacją.
    401.501Odmowa dostępu: osiągnięto limit równoczesnych żądań - Zbyt wiele jednoczesnych żądań z tego samego adresu IP klienta.
    401.502Odmowa dostępu: osiągnięto maksymalny limit żądań - Adres IP klienta przekroczył maksymalną liczbę żądań w określonym czasie.
    401.503Odmowa dostępu: adres IP zablokowany - Adres IP klienta znajduje się na liście blokowanych.
    401.504Odmowa dostępu: nazwa hosta zablokowana - Nazwa hosta klienta znajduje się na liście blokowanych.