Contenuto

    Risposta del server 401 Unauthorized

    HTTP status code 401: Unauthorized

    Il codice di stato HTTP 401 (Unauthorized) indica che la richiesta non è stata applicata perché manca un'autenticazione valida per la risorsa di destinazione. Questo codice è comune nello sviluppo web e può generare confusione tra gli sviluppatori, specialmente quando si lavora con le API. In questo articolo, esploreremo le cause di questo stato, esempi pratici di come si presenta e modi per risolverlo in vari linguaggi di programmazione.

    401 - Unauthorized

    Cause di occorrenza dello stato 401

    • Assenza di dati di autenticazione
    • Dati di accesso errati
    • Token di accesso scaduto
    • Formato errato degli header di autenticazione

    Esempi pratici

    1. Esempio 1: Errore durante il tentativo di accesso a una risorsa protetta

      Situazione: Un utente cerca di accedere a un'API che richiede autenticazione, ma non fornisce dati di accesso.

      Comportamento atteso: Il server restituisce lo stato 401.

    2. Esempio 2: Dati di accesso errati

      Situazione: Un utente invia una richiesta con un nome utente e una password errati.

      Comportamento atteso: Il server restituisce lo stato 401 con un messaggio di autenticazione fallita.

    3. Esempio 3: Utilizzo di un token scaduto

      Situazione: Un utente cerca di utilizzare un token che è scaduto.

      Comportamento atteso: Il server restituisce lo stato 401 con una richiesta di aggiornamento del token.

    Modi per risolvere l'errore 401 in vari linguaggi di programmazione

    JavaScript (Node.js)

    Gestione dell'autenticazione utilizzando la libreria 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)

    Utilizzo della libreria Flask per controllare i dati di autenticazione.

    
    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

    Gestione dell'autenticazione tramite header.

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

    Tabella delle cause e delle soluzioni

    Cause Soluzioni
    Assenza di dati di autenticazione Fornire le credenziali nell'header della richiesta.
    Dati di accesso errati Verificare e correggere il nome utente e la password.
    Token di accesso scaduto Richiedere un nuovo token di accesso.
    Formato errato degli header di autenticazione Controllare il formato degli header e correggerlo.

    In questo articolo abbiamo analizzato il significato del codice di stato 401 (Unauthorized), le sue cause e esempi di utilizzo, nonché i metodi per gestirlo nei vari linguaggi di programmazione.

    Codici aggiuntivi

    CodiceDescrizione
    401.1Accesso non riuscito - Il tentativo di accesso non è riuscito a causa di nome utente o password errati.
    401.2Accesso non riuscito a causa della configurazione del server - C'è un problema con la configurazione di autenticazione sul server.
    401.3Non autorizzato a causa di ACL sulla risorsa - Accesso negato a causa di permessi del file system NTFS.
    401.4Autorizzazione non riuscita per filtro - Un filtro ISAPI ha bloccato la richiesta a causa di problemi di autorizzazione.
    401.5Autorizzazione non riuscita per applicazione ISAPI/CGI - L'applicazione ISAPI o CGI ha bloccato la richiesta a causa di problemi di autorizzazione.
    401.501Accesso negato: raggiunto il limite di frequenza delle richieste simultanee - Troppe richieste simultanee dallo stesso IP client.
    401.502Accesso negato: raggiunto il limite massimo di frequenza delle richieste - L'IP client ha superato il numero massimo di richieste in un tempo specificato.
    401.503Accesso negato: indirizzo IP negato - L'indirizzo IP del client è nell'elenco di rifiuto.
    401.504Accesso negato: nome host negato - Il nome host del client è nell'elenco di rifiuto.