Contenu

    Réponse du serveur 401 Unauthorized

    HTTP Statut 401 (Non autorisé)

    Le code de statut HTTP 401 (Non autorisé) signale que la demande n'a pas été appliquée en raison de l'absence d'une authentification valide pour la ressource ciblée. Ce code est fréquemment rencontré dans le développement web et peut prêter à confusion, en particulier lors de l'utilisation d'APIs. Dans cet article, nous allons examiner les causes fréquentes de ce statut, des exemples pratiques, ainsi que des solutions pour le résoudre dans différents langages de programmation.

    401 - Unauthorized

    Causes de l'apparition du statut 401

    • Absence de données d'authentification
    • Données d'identification incorrectes
    • Jetons d'accès expirés
    • Mauvais format des en-têtes d'authentification

    Exemples pratiques

    1. Exemple 1 : Erreur d'accès à une ressource protégée

      Un utilisateur tente d'accéder à une API nécessitant une authentification sans fournir de données d'identification.

      Comportement attendu : Le serveur renvoie le statut 401.

    2. Exemple 2 : Données d'identification incorrectes

      Un utilisateur envoie une demande avec un nom d'utilisateur et un mot de passe erronés.

      Comportement attendu : Le serveur renvoie le statut 401 avec un message d'échec d'authentification.

    3. Exemple 3 : Utilisation d'un jeton expiré

      Un utilisateur essaie d'utiliser un jeton qui a expiré.

      Comportement attendu : Le serveur renvoie le statut 401 avec une demande de mise à jour du jeton.

    Méthodes de correction de l'erreur 401 selon différents langages de programmation

    Langage Description Exemple de code
    JavaScript (Node.js) Gestion de l'authentification avec la bibliothèque 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) Utilisation de la bibliothèque Flask pour vérifier les données d'authentification.
    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 Gestion de l'authentification via les en-têtes.
    <?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';
    }
    ?>

    Dans cet article, nous avons exploré ce que signifie le code de statut 401 (Non autorisé), ses causes et exemples d'apparition, ainsi que des méthodes pour traiter et corriger cette erreur dans plusieurs langages de programmation. Une bonne compréhension de ce statut est essentielle pour le développement d'applications sécurisées et robustes.

    Codes supplémentaires

    CodeDescription
    401.1Connexion échouée - La tentative de connexion a échoué en raison d'un nom d'utilisateur ou d'un mot de passe incorrect.
    401.2Connexion échouée en raison de la configuration du serveur - Il y a un problème avec la configuration de l'authentification sur le serveur.
    401.3Non autorisé en raison de l'ACL sur la ressource - L'accès est refusé en raison des autorisations du système de fichiers NTFS.
    401.4L'autorisation a échoué par le filtre - Un filtre ISAPI a bloqué la demande en raison de problèmes d'autorisation.
    401.5L'autorisation a échoué par l'application ISAPI/CGI - L'application ISAPI ou CGI a bloqué la demande en raison de problèmes d'autorisation.
    401.501Accès refusé : limite de débit de demandes simultanées atteinte - Trop de demandes simultanées provenant de la même IP client.
    401.502Accès refusé : limite de débit de demandes maximale atteinte - L'IP client a dépassé le nombre maximal de demandes dans un délai spécifié.
    401.503Accès refusé : adresse IP refusée - L'adresse IP du client figure sur la liste des refus.
    401.504Accès refusé : nom d'hôte refusé - Le nom d'hôte du client figure sur la liste des refus.