15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
10.10.2024

Erro HTTP 401 Não Autorizado: Guia Completo de Diagnóstico e Correção

O código de status HTTP 401 Unauthorized significa que o servidor recebeu o seu pedido, mas recusa-se a processá-lo porque as credenciais de autenticação válidas estavam ausentes, incorretas ou expiradas. Ao contrário de um erro 403 Forbidden — onde o servidor o reconhece mas nega o acesso com base em permissões — um 401 sinaliza especificamente uma falha de autenticação: o servidor não sabe quem você é, ou não consegue verificar.

Esta distinção é importante. Uma resposta 401 inclui sempre um cabeçalho WWW-Authenticate na resposta do servidor, instruindo o cliente sobre qual esquema de autenticação utilizar. Se esse cabeçalho estiver ausente, pode estar a lidar com um servidor mal configurado em vez de um problema de credenciais. Conhecer o modo exato de falha antes de começar a solucionar problemas poupa tempo significativo.

Como é Realmente uma Resposta 401

O erro surge sob várias variantes de mensagem dependendo do software do servidor, framework ou CDN à frente da aplicação:

  • 401 Unauthorized
  • HTTP Error 401 – Unauthorized
  • 401 Unauthorized: Access is denied due to invalid credentials
  • Authorization Required
  • 401 Authorization Required (comum no NGINX)
    HTTP 401 (clientes API, Postman, curl)
    
    Todos estes correspondem ao mesmo código de status definido pelo RFC 9110. A variação na formulação é puramente cosmética — determinada pelo servidor web, proxy reverso ou framework de aplicação que gera a resposta.
    A Anatomia Técnica de um Erro 401
    Compreender o que acontece ao nível do protocolo evita suposições. Quando um cliente envia um pedido a um recurso protegido sem credenciais, o servidor responde com:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Bearer realm="example", error="invalid_token"
    Content-Type: application/json
    O cabeçalho WWW-Authenticate é o desafio do servidor. Indica ao cliente exatamente qual esquema — Basic, Bearer, Digest, NTLM, ou um esquema personalizado — é necessário. Um cliente que ignore este cabeçalho e tente novamente sem ajustar o seu pedido ficará em loop indefinidamente.
    401 vs. 403 vs. 407: Conhecer a Diferença
    
    
    
    Código de Status
    Nome
    Causa Raiz
    Cabeçalho `WWW-Authenticate`
    
    
    
    
    
    
    
    
    —
    —
    —
    —
    
    
    
    
    
    
    
    
    401
    Unauthorized
    Credenciais de autenticação ausentes ou inválidas
    Obrigatório pela especificação
    
    
    
    
    
    
    
    
    403
    Forbidden
    Autenticado mas sem permissão
    Não presente
    
    
    
    
    
    
    
    
    407
    Proxy Auth Required
    O servidor proxy requer credenciais
    Cabeçalho `Proxy-Authenticate`
    
    
    
    
    
    
    
    
    511
    Network Auth Required
    Portal cativo (Wi-Fi de hotel, etc.)
    Não aplicável
    
    
    
    
    
    Identificar erroneamente um 403 como um 401 é um erro comum de programadores. Se o seu servidor retorna 401 mas omite WWW-Authenticate, está tecnicamente em não conformidade com o RFC 9110 — e alguns clientes HTTP rigorosos tratarão a resposta como malformada.
    Causas Raiz de um Erro 401 Unauthorized
    Problemas de Credenciais e Tokens
    
    Nome de utilizador ou palavra-passe incorretos — a causa mais frequente para acesso baseado em browser
    Tokens de acesso expirados — os tokens Bearer do OAuth 2.0 têm um valor expires_in finito; uma vez decorrido, cada pedido retorna 401 até o token ser renovado
    Chaves API revogadas — as chaves podem ser invalidadas do lado do servidor sem que o cliente seja notificado
    Incompatibilidade de assinatura JWT — se o segredo de assinatura for rotacionado e o cliente tiver um token assinado com o segredo antigo, a verificação falha silenciosamente
    Desvio de relógio — os JWTs incluem declarações iat (emitido em) e exp (expiração) validadas contra o tempo do servidor; um relógio do cliente desviado por mais de alguns minutos pode fazer com que tokens válidos sejam rejeitados
    
    Cabeçalhos de Autorização Ausentes ou Malformados
    Cada esquema de autenticação tem um formato de cabeçalho preciso. Desviar-se dele — mesmo por um único espaço ou preenchimento Base64 incorreto — produz um 401:
    # Correct Basic Auth header
    Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
    
    # Correct Bearer token header
    Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
    Um erro comum é enviar Authorization: bearer <token> (b em minúsculas). Embora o RFC 6750 indique que o nome do esquema não é sensível a maiúsculas/minúsculas, muitas bibliotecas do lado do servidor realizam correspondência exata de strings e rejeitam a variante em minúsculas.
    Configuração Incorreta do Lado do Servidor
    
    Método de autenticação errado aplicado — um servidor configurado para OAuth 2.0 que recebe cabeçalhos Basic Auth irá rejeitá-los
    Diretivas .htaccess — no Apache, uma diretiva AuthType, AuthName ou Require mal configurada em .htaccess bloqueará cada pedido atrás de um prompt de palavra-passe
    Blocos auth_basic do NGINX — uma diretiva auth_basic aplicada ao bloco location errado pode bloquear utilizadores legítimos
    Proxy reverso a remover cabeçalhos — balanceadores de carga e proxies reversos (NGINX, HAProxy, Cloudflare) podem remover ou reescrever cabeçalhos Authorization antes de chegarem ao servidor de origem
    
    Interferência do Browser e do Lado do Cliente
    
    Cookies corrompidos — os cookies de sessão que transportam o estado de autenticação podem ficar corrompidos ou desatualizados após uma invalidação de sessão do lado do servidor
    Extensões de browser agressivas — bloqueadores de anúncios, extensões de privacidade e extensões VPN podem modificar ou remover cabeçalhos de pedidos
    Falhas no preflight CORS — em chamadas API de origem cruzada, o browser envia um pedido de preflight OPTIONS; se o servidor não responder corretamente, o pedido autenticado real nunca é enviado
    
    Fatores de Infraestrutura e Rede
    
    Regras de firewall a bloquear endpoints de autenticação — WAFs (Web Application Firewalls) com regras excessivamente agressivas podem sinalizar e descartar pedidos contendo cabeçalhos Authorization como potenciais ataques de injeção
    CDN a armazenar em cache respostas autenticadas — se um CDN armazenar em cache uma resposta 401 e a servir a utilizadores subsequentes, mesmo credenciais válidas parecerão falhar
    Limitação de taxa baseada em IP — tentativas de autenticação falhadas repetidas podem desencadear um bloqueio temporário que retorna 401 para todos os pedidos desse IP
    
    Como Corrigir um Erro 401: Passo a Passo
    Para Utilizadores Finais e Acesso por Browser
    Passo 1: Verificar as credenciais com precisão
    Verifique se o Caps Lock está desativado. Confirme que está a utilizar a palavra-passe atual — não uma guardada antes de uma redefinição recente. Se a sua conta utiliza autenticação multifator (MFA), certifique-se de que o código único não expirou (os códigos TOTP são válidos por 30 segundos por padrão).
    Passo 2: Limpar cookies e cache do browser
    Cookies de sessão desatualizados são uma fonte persistente de loops 401. No Chrome, navegue para chrome://settings/clearBrowserData, defina o intervalo de tempo para Todo o período, marque Cookies e outros dados do site e Imagens e ficheiros em cache, e depois limpe. No Firefox, utilize about:preferences#privacy e clique em Limpar Dados.
    Após limpar, feche todos os separadores do browser para o domínio afetado antes de tentar novamente — alguns browsers mantêm o estado de sessão em memória que sobrevive a uma limpeza de cache se o separador permanecer aberto.
    Passo 3: Testar numa janela privada/incógnito
    Uma janela privada começa sem cookies, sem dados em cache e com a maioria das extensões desativadas. Se o 401 desaparecer no modo incógnito, o problema é definitivamente do lado do cliente: seja um cookie corrompido, uma resposta má em cache, ou uma extensão do browser.
    Passo 4: Desativar extensões seletivamente
    Navegue para chrome://extensions/ e desative todas as extensões. Recarregue a página. Se a autenticação for bem-sucedida, reative as extensões uma de cada vez para isolar a culpada. Privacy Badger, uMatrix e certas extensões VPN são infratores frequentes.
    Passo 5: Verificar erros no URL
    Certifique-se de que não está a navegar para um caminho que requer permissões elevadas. Um URL como /admin/dashboard retornará 401 se a sua sessão não tiver privilégios de administrador — mesmo que o seu login básico seja válido. Verifique o caminho exato com o proprietário do site ou a documentação.
    Passo 6: Redefinir a sua palavra-passe
    Se suspeitar de expiração de credenciais, utilize o fluxo Esqueci a Palavra-passe. Após redefinir, limpe os cookies novamente antes de tentar iniciar sessão — o cookie de sessão antigo pode entrar em conflito com o novo estado de credenciais.
    Para Programadores e Integrações API
    Passo 7: Inspecionar a resposta HTTP em bruto
    Antes de alterar qualquer coisa, capture a resposta exata do servidor usando curl com saída detalhada:
    curl -v -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/endpoint
    O sinalizador -v mostra tanto os cabeçalhos de pedido enviados como os cabeçalhos de resposta recebidos, incluindo o desafio WWW-Authenticate. Isto indica-lhe precisamente qual esquema o servidor espera.
    Passo 8: Validar o estado do token
    Para tokens JWT, descodifique o payload sem verificar a assinatura para inspecionar as declarações:
    echo "YOUR_JWT_PAYLOAD_BASE64" | base64 --decode | python3 -m json.tool
    Verifique o campo exp (timestamp Unix). Compare-o com o tempo atual:
    date +%s
    Se exp for inferior ao timestamp atual, o token está expirado. Implemente um fluxo de renovação usando o endpoint de token do seu fornecedor OAuth antes de o token atingir a expiração.
    Passo 9: Auditar a configuração de autenticação do lado do servidor
    No Apache, inspecione o ficheiro .htaccess relevante ou a configuração do host virtual:
    AuthType Basic
    AuthName "Restricted Area"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
    Confirme que o caminho AuthUserFile existe e é legível pelo processo do servidor web. No NGINX, verifique o bloco de servidor ou localização relevante:
    location /secure/ {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
    Verifique se o ficheiro .htpasswd contém as credenciais com hash corretas. Use htpasswd -v /etc/nginx/.htpasswd username para testar uma palavra-passe contra o hash armazenado.
    Passo 10: Verificar os logs do servidor
    Os logs do servidor fornecem a verdade absoluta. No Apache:
    tail -f /var/log/apache2/error.log | grep 401
    No NGINX:
    tail -f /var/log/nginx/error.log | grep 401
    Para autenticação ao nível da aplicação (Node.js, Django, Laravel), verifique a saída de log da própria aplicação. A entrada de log especificará frequentemente se a falha foi um cabeçalho ausente, um token inválido ou uma falha de pesquisa na base de dados.
    Passo 11: Verificar o encaminhamento de cabeçalhos do proxy reverso
    Se a sua aplicação estiver atrás do NGINX a funcionar como proxy reverso, certifique-se de que o cabeçalho Authorization é encaminhado para a aplicação upstream:
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Authorization $http_authorization;
        proxy_pass_header Authorization;
    }
    Sem proxy_pass_header Authorization, o NGINX remove o cabeçalho antes de chegar ao seu servidor de aplicação — causando um 401 que parece um erro do cliente mas é inteiramente causado pela infraestrutura.
    Passo 12: Inspecionar regras de WAF e firewall
    Se estiver a executar um WAF (ModSecurity, Cloudflare WAF, AWS WAF), verifique se alguma regra está a corresponder e a bloquear pedidos contendo cabeçalhos Authorization. Defina temporariamente o WAF para modo apenas de deteção e tente novamente. Se o 401 desaparecer, refine a regra infratora em vez de desativar o WAF completamente.
    Passo 13: Auditar o comportamento de cache do CDN
    Certifique-se de que o seu CDN não está a armazenar em cache respostas 401. No Cloudflare, defina uma Regra de Cache para ignorar o cache em endpoints autenticados. No AWS CloudFront, configure o comportamento para encaminhar o cabeçalho Authorization para a origem — por padrão, o CloudFront remove-o, o que significa que a sua origem nunca recebe credenciais e retorna sempre 401.
    Implementar Autenticação Robusta: Melhores Práticas para Proprietários de Servidores
    Se gerir uma aplicação web ou API — seja num ambiente de VPS Hosting ou num Servidor Dedicado — estas práticas evitam que erros 401 cheguem aos seus utilizadores.
    Gestão do Ciclo de Vida dos Tokens
    Nunca emita tokens sem uma expiração definida. Para OAuth 2.0, utilize tokens de acesso de curta duração (15–60 minutos) emparelhados com tokens de renovação de longa duração. Implemente renovação proativa de tokens: acione uma renovação quando o token de acesso tiver menos de 20% do seu tempo de vida restante, não depois de já ter expirado.
    Access Token TTL:  15 minutes
    Refresh Token TTL: 30 days (rotated on each use)
    Refresh trigger:   < 3 minutes remaining on access token
    Para sistemas baseados em JWT, implemente rotação de chaves com um período de carência. Ao rodar o segredo de assinatura, mantenha o segredo antigo válido por mais um tempo de vida de token para que os tokens em trânsito não sejam imediatamente invalidados.
    Respostas de Erro Significativas
    Uma resposta 401 deve incluir sempre um corpo que ajude o cliente a compreender o que fazer a seguir:
    {
      "error": "invalid_token",
      "error_description": "The access token expired at 2024-01-15T10:30:00Z",
      "error_uri": "https://api.example.com/docs/authentication"
    }
    Respostas 401 vagas que retornam apenas um código de status forçam os programadores a adivinhar o motivo da falha, aumentando drasticamente a carga de suporte.
    Registo e Alertas de Autenticação
    Registe cada falha de autenticação com contexto suficiente: timestamp, endereço IP, agente de utilizador, recurso solicitado e motivo da falha. Configure alertas para padrões anómalos — um pico de 401s de um único IP indica uma configuração incorreta ou um ataque de credential stuffing. As plataformas a correr em Servidores Dedicados têm acesso total aos logs ao nível do sistema e podem implementar pipelines de alertas personalizados sem restrições.
    Transmissão Segura de Credenciais
    As credenciais de autenticação devem viajar apenas através de ligações encriptadas. Se a sua aplicação lida com logins de utilizadores, um Certificado SSL é inegociável — transmitir credenciais Basic Auth através de HTTP simples expõe nomes de utilizador e palavras-passe codificados em Base64 em texto simples na rede.
    Âmbito e Rotação de Chaves API
    Emita chaves API com o âmbito mínimo necessário. Implemente uma política de rotação de chaves e forneça aos clientes um mecanismo de rotação que lhes permita trocar chaves sem tempo de inatividade. Revogue imediatamente as chaves comprometidas e notifique os clientes afetados através de um canal documentado.
    Testar Fluxos de Autenticação em CI/CD
    Integre testes de fluxo de autenticação no seu pipeline de implementação. Um conjunto de testes que exercite credenciais válidas, tokens expirados, cabeçalhos ausentes e chaves revogadas detetará regressões antes de chegarem à produção. Isto é especialmente crítico após atualizações de dependências que tocam no middleware de autenticação.
    Erros 401 em Ambientes Específicos
    WordPress
    O WordPress retorna 401 na sua REST API (/wp-json/) quando as Palavras-passe de Aplicação estão mal configuradas ou quando um plugin de segurança (Wordfence, iThemes Security) bloqueia o acesso à REST API. Verifique Settings > Permalinks e guarde novamente — isto limpa as regras de reescrita que podem quebrar os endpoints de autenticação. Se gerir WordPress num VPS com cPanel, verifique se mod_rewrite está ativado e se .htaccess tem permissão de escrita.
    cPanel e Painéis de Controlo de Alojamento Web
    Os diretórios protegidos por palavra-passe configurados através do cPanel utilizam o mod_authn_file do Apache. Se o caminho do ficheiro .htpasswd no .htaccess gerado for absoluto e a raiz do documento mudar (comum após migrações de conta), o caminho quebra e cada pedido retorna 401. Utilize sempre caminhos relativos ou verifique os caminhos absolutos após qualquer migração. Os ambientes que utilizam Painéis de Controlo VPS fornecem acesso direto ao sistema de ficheiros para corrigir estes caminhos sem abrir um ticket de suporte.
    Clientes de Email e Autenticação SMTP
    Os servidores SMTP retornam um equivalente ao nível do protocolo de 401 (535 Authentication credentials invalid) quando as credenciais do cliente de email estão erradas ou quando o servidor requer STARTTLS e o cliente tenta autenticação simples. Se estiver a configurar Alojamento de Email, certifique-se de que o seu cliente de email está configurado com o método de autenticação correto (PLAIN, LOGIN ou CRAM-MD5) e que o TLS é aplicado antes de as credenciais serem transmitidas.
    Aplicações Móveis
    As aplicações móveis encontram frequentemente erros 401 após um utilizador alterar a sua palavra-passe na web — o token de renovação armazenado da aplicação é invalidado do lado do servidor, mas a aplicação não tem mecanismo para detetar isto até que a próxima chamada API falhe. Implemente um interceptor HTTP global que capture respostas 401, tente uma renovação de token exatamente uma vez, e se a renovação também retornar 401, redirecione o utilizador para o ecrã de login com uma mensagem clara.
    Matriz de Decisão: Diagnosticar o Seu Erro 401
    
    
    
    Sintoma
    Causa Mais Provável
    Primeira Ação
    
    
    
    
    
    
    
    
    —
    —
    —
    
    
    
    
    
    
    
    
    401 em todos os pedidos, incluindo os que funcionavam anteriormente
    Token expirado ou revogado
    Inspecionar a declaração `exp` do token; acionar renovação
    
    
    
    
    
    
    
    
    401 apenas no browser, não no curl
    Cookie corrompido ou interferência de extensão
    Limpar cookies; testar em incógnito
    
    
    
    
    
    
    
    
    401 apenas de um IP específico
    Limite de taxa de firewall ou bloqueio de IP
    Verificar logs do WAF; adicionar à lista branca se legítimo
    
    
    
    
    
    
    
    
    401 após migração de servidor
    Caminho `.htpasswd` quebrado
    Verificar o caminho `AuthUserFile` em `.htaccess`
    
    
    
    
    
    
    
    
    401 no preflight OPTIONS
    Configuração incorreta de CORS
    Adicionar `Authorization` a `Access-Control-Allow-Headers`
    
    
    
    
    
    
    
    
    401 apesar de credenciais corretas
    Proxy reverso a remover cabeçalhos
    Adicionar `proxy_pass_header Authorization` à configuração do NGINX
    
    
    
    
    
    
    
    
    401 em recursos em cache do CDN
    CDN a servir resposta 401 em cache
    Ignorar cache para rotas autenticadas
    
    
    
    
    
    
    
    
    401 após atualização de dependência
    Alteração disruptiva no middleware de autenticação
    Rever changelog; verificar lógica de análise de cabeçalhos
    
    
    
    
    
    Lista de Verificação Prática Antes de Escalar um Erro 401
    Utilize esta lista de verificação antes de abrir um ticket de suporte ou escalar para a sua equipa de infraestrutura:
    
    Capturou a resposta HTTP em bruto com curl -v e confirmou o valor do cabeçalho WWW-Authenticate
  • Descodificou o JWT ou token e verificou a declaração exp contra o tempo atual do servidor
  • Confirmou que o formato do cabeçalho Authorization corresponde ao esquema que o servidor anuncia
  • Testou numa janela incógnito com todas as extensões desativadas
  • Limpou todos os cookies e cache para o domínio afetado
  • Verificou os logs de erro do servidor para o motivo específico de rejeição
  • Verificou que a configuração do proxy reverso está a encaminhar o cabeçalho Authorization
  • Confirmou que o CDN não está a armazenar em cache a resposta 401
  • Verificou as regras do WAF para correspondências de falsos positivos no cabeçalho Authorization
  • Verificou que SSL/TLS está ativo no endpoint — as credenciais nunca devem viajar sem encriptação

FAQ

Qual é a diferença entre HTTP 401 e HTTP 403?

Um 401 significa que o servidor não consegue identificar quem você é — a autenticação está ausente ou inválida. Um 403 significa que o servidor sabe quem você é mas decidiu que não tem permissão para aceder ao recurso. Corrija um 401 fornecendo ou corrigindo credenciais; corrija um 403 ajustando as regras de controlo de acesso ou permissões.

Por que razão a minha API retorna 401 mesmo quando envio o token correto?

As causas mais comuns são a expiração do token (verifique a declaração exp), desvio de relógio entre cliente e servidor (sincronize NTP), um segredo de assinatura rotacionado que invalida tokens existentes, ou o cabeçalho Authorization a ser removido por um proxy reverso ou CDN antes de chegar ao servidor de origem.

Pode um erro 401 ser causado por configuração incorreta do servidor em vez de erro do cliente?

Sim. Um ficheiro .htaccess mal configurado, um bloco auth_basic do NGINX aplicado à localização errada, um proxy reverso a remover o cabeçalho Authorization, ou uma regra WAF a bloquear pedidos autenticados podem todos produzir respostas 401 mesmo quando o cliente envia credenciais perfeitamente válidas.

Como posso evitar erros 401 causados pela expiração de tokens numa aplicação em produção?

Implemente renovação proativa de tokens — monitorize o tempo de vida restante do token e renove-o antes da expiração, não depois. Para OAuth 2.0, utilize o endpoint de token de renovação para obter um novo token de acesso quando o atual tiver menos de 20% do seu TTL restante. Adicione um interceptor de resposta HTTP global que trate automaticamente as respostas 401 tentando uma única renovação de token antes de repetir o pedido original.

Limpar cookies resolve sempre um erro 401 num browser?

Apenas se a causa raiz for um cookie de sessão corrompido ou desatualizado. Se o 401 for causado por configuração incorreta do lado do servidor, uma chave API expirada ou um bloqueio de firewall, limpar cookies não terá efeito. Utilize uma janela incógnito como passo de diagnóstico — se o 401 persistir em incógnito, o problema é do lado do servidor ou da rede, não do browser.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar