Artigo original: HTTP 401 Error vs HTTP 403 Error – Status Code Responses Explained

Tratamos do código de erro 403 (Proibido) do HTTP em detalhes em outro momento, mas ele tem um irmão quase gêmeo.

Qual é, exatamente, a diferença entre os códigos de status 401 (Não autorizado) e 403 (Proibido)? Será que eles significam a mesma coisa? Vamos ver!

Padrões RFC

O padrão RFC mais atualizado definindo o status 401 (Não autorizado) é o RFC 7235

O código de status 401 (Não autorizado) indica que a solicitação não foi aplicada por falta de credenciais de autenticação válidas para o recurso de destino... O agente do usuário PODE repetir a solicitação com um campo de cabeçalho Authorization novo ou diferente.

O código de status 403 (Proibido), por sua vez, tem sua definição mais recente no RFC 7231

O status 403 (Proibido) indica que o servidor entendeu a solicitação, mas se recusa a autorizá-la... Se as credenciais de autenticação foram fornecidas na solicitação, o servidor as considera insuficientes para liberar o acesso.

Causas comuns

Conforme mencionamos no artigo anterior, o erro 403 pode ocorrer quando um usuário está conectado (logado) mas não tem privilégios suficientes para acessar o recurso solicitado. Por exemplo, um usuário genérico pode estar tentando carregar algo na rota do 'admin'.

A situação mais óbvia em que você poderá encontrar um erro 401, por outro lado, é quando você não está conectado ou quando forneceu uma senha incorreta.

Essas são as duas causas mais comuns para esses erros.

Causas menos comuns

Existem algumas instâncias, porém, onde as coisas não são tão claras.

Os erros 403 podem ocorrer devido a restrições não inteiramente dependentes das credenciais do usuário conectado.

Por exemplo, um servidor pode ter bloqueado recursos específicos para permitir acesso apenas a um intervalo definido de endereços IP, ou ainda pode utilizar o bloqueio por localização geográfica. Nesse caso, é possível contornar o bloqueio por meio de uma VPN.

Os erros 401 podem ocorrer mesmo se o usuário inserir as credenciais corretas. Isso é raro de acontecer e pode ser algo que você somente encontrará ao desenvolver seu próprio back-end autenticado. Porém, se o cabeçalho de autorização não tiver sido criado corretamente, retornará um status 401.

Para exemplificar, você pode ter um JWT (JSON Web Token) que você quer incluir no cabeçalho da solicitação, o qual espera o formato Authorization: Bearer eyJhbGci......yJV_adQssw5c. Se você esquecer a palavra 'Bearer' (em português, portador) antes do JWT, veria um erro 401 acontecer.

Já tive esse problema ao testar APIs em desenvolvimento com o Postman e esquecer a sintaxe correta para os cabeçalhos de autenticação!

Conclusão

Espero ter esclarecido algumas das confusões que podem ocorrer relativas a esses erros bastante semelhantes.

Se você achou este artigo útil ou se quiser contestar ou ampliar algumas das questões levantadas aqui, fique à vontade para entrar em contato com o autor do artigo pelo Twitter.