Conteúdo

    Resposta do servidor 401 Unauthorized

    Código de Status HTTP 401 (Unauthorized)

    O código de status HTTP 401 indica que a solicitação não foi aplicada devido à falta de autenticação válida para o recurso solicitado. Este código é frequentemente encontrado em desenvolvimento web e pode causar confusões entre desenvolvedores, especialmente ao trabalhar com APIs. Nesta seção, exploraremos as razões comuns para a ocorrência desse status e forneceremos exemplos práticos de como lidar com essa situação em diferentes linguagens de programação.

    401 - Unauthorized

    Razões para a Ocorrência do Status 401

    • Ausência de dados de autenticação
    • Credenciais inválidas
    • Tokens de acesso expirados
    • Formato incorreto dos cabeçalhos de autenticação

    Exemplos Práticos

    1. Exemplo 1: Erro ao tentar acessar um recurso protegido

      Descrição: Um usuário tenta acessar uma API que requer autenticação, mas não fornece nenhuma credencial.

      Comportamento esperado: O servidor retorna o status 401.

    2. Exemplo 2: Credenciais inválidas

      Descrição: Um usuário envia uma solicitação com um nome de usuário e senha incorretos.

      Comportamento esperado: O servidor retorna o status 401 com uma mensagem de falha na autenticação.

    3. Exemplo 3: Uso de um token expirado

      Descrição: Um usuário tenta usar um token que já expirou.

      Comportamento esperado: O servidor retorna o status 401 pedindo que o token seja atualizado.

    Métodos para Corrigir o Erro 401 em Diferentes Linguagens de Programação

    Linguagem Descrição Exemplo de Código
    JavaScript (Node.js) Manipulação de autenticação usando a biblioteca 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) Uso da biblioteca Flask para verificar dados de autenticação.
    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 Manipulação de autenticação através de cabeçalhos.
    <?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';
    }
    ?>

    Códigos Adicionais

    CódigoDescrição
    401.1Falha no login - A tentativa de login falhou devido a nome de usuário ou senha incorretos.
    401.2Falha no login devido à configuração do servidor - Há um problema com a configuração de autenticação no servidor.
    401.3Não autorizado devido a ACL no recurso - O acesso foi negado devido a permissões do sistema de arquivos NTFS.
    401.4Autorização falhou pelo filtro - Um filtro ISAPI bloqueou a solicitação devido a problemas de autorização.
    401.5Autorização falhou pelo aplicativo ISAPI/CGI - O aplicativo ISAPI ou CGI bloqueou a solicitação devido a problemas de autorização.
    401.501Acesso negado: limite de taxa de solicitações concorrentes atingido - Muitas solicitações concorrentes do mesmo IP de cliente.
    401.502Acesso negado: limite máximo de taxa de solicitações atingido - O IP do cliente excedeu o número máximo de solicitações em um determinado tempo.
    401.503Acesso negado: endereço IP negado - O endereço IP do cliente está na lista de bloqueios.
    401.504Acesso negado: nome do host negado - O nome do host do cliente está na lista de bloqueios.