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