Obsah

    Odpověď serveru 401 Unauthorized

    HTTP Status Kód 401 (Unauthorized)

    HTTP status kód 401 označuje, že požadavek nebyl zpracován, protože chybí platná autentizace pro cílový zdroj. Tento kód je běžně používán ve webovém vývoji a může vyvolávat nedorozumění u vývojářů, zejména při práci s API. V této článku se podíváme na praktické příklady vzniku tohoto statusu a také na způsoby jeho opravy v různých programovacích jazycích.

    401 - Unauthorized

    Příčiny vzniku statusu 401

    • Absence autentizačních údajů
    • Nesprávné přihlašovací údaje
    • Expired access tokens
    • Nesprávný formát autentizačních hlaviček

    Praktické příklady

    1. Příklad 1: Chyba při pokusu o přístup k chráněnému zdroji

      Popis situace: Uživatel se pokouší získat přístup k API, které vyžaduje autentizaci, ale neposkytuje žádné přihlašovací údaje.

      Očekávané chování: Server vrátí status 401.

    2. Příklad 2: Nesprávné přihlašovací údaje

      Popis situace: Uživatel odesílá požadavek s chybným uživatelským jménem a heslem.

      Očekávané chování: Server vrátí status 401 s informací o neúspěšné autentizaci.

    3. Příklad 3: Použití vypršeného tokenu

      Popis situace: Uživatel se pokouší použít token, který vypršel.

      Očekávané chování: Server vrátí status 401 s žádostí o obnovu tokenu.

    Způsoby opravy chyby 401 v různých programovacích jazycích

    JavaScript (Node.js)

    Ošetření autentizace pomocí knihovny 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)

    Použití knihovny Flask pro kontrolu autentizačních údajů.

    
    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

    Ošetření autentizace pomocí hlaviček.

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

    Tabulka příčin a řešení statusu 401

    Příčina Řešení
    Absence autentizačních údajů Ujistěte se, že jsou údaje poskytnuty v požadavku.
    Nesprávné přihlašovací údaje Zkontrolujte správnost zadaných údajů.
    Vypršené tokeny Obnovte token pomocí dostupných metod obnovení.
    Nesprávný formát hlaviček Ověřte formát hlaviček podle specifikace API.

    V této článku jsme prozkoumali, co znamená status kód 401 (Unauthorized), jeho příčiny a příklady výskytu, stejně jako způsoby, jak tento problém řešit v různých programovacích jazycích.

    Další kódy

    KódPopis
    401.1Přihlášení se nezdařilo - Přihlášení selhalo kvůli nesprávnému uživatelskému jménu nebo heslu.
    401.2Přihlášení selhalo kvůli konfiguraci serveru - Problém s autentizací na serveru.
    401.3Neoprávněný přístup kvůli ACL - Přístup byl odepřen kvůli oprávněním souborového systému NTFS.
    401.4Autorizace selhala kvůli filtru - Požadavek byl zablokován ISAPI filtrem.
    401.5Autorizace selhala kvůli ISAPI/CGI aplikaci - Požadavek byl zablokován ISAPI nebo CGI aplikací.
    401.501Přístup odepřen: dosažen limit souběžných požadavků - Příliš mnoho souběžných požadavků z jedné IP.
    401.502Přístup odepřen: dosažen maximální limit požadavků - IP překročila maximální počet požadavků za určité období.
    401.503Přístup odepřen: IP adresa odmítnuta - IP adresa klienta je na seznamu zakázaných adres.
    401.504Přístup odepřen: hostitelské jméno odmítnuto - Hostitelské jméno klienta je na seznamu zakázaných hostitelů.