O código de status 401 (não autorizado) indica que a solicitação não foi aplicada porque não possui 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 de Autorização novo ou substituído.

Considerando que 403 (Proibido) é definido mais recentemente em RFC 7231

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

Causas óbvias

Conforme mencionado no artigo anterior, o erro 403 pode ser um caso de logon, mas o usuário não possui privilégios suficientes para acessar o recurso solicitado. Por exemplo, um usuário genérico pode estar tentando carregar uma rota 'admin'.

A hora mais óbvia para encontrar um erro 401, por outro lado, é quando você não efetuou login ou forneceu a senha incorreta.

Essas são as duas causas mais comuns para esse par de erros.

Causas menos óbvias

Existem alguns casos em que não é tão simples assim.

Os erros 403 podem ocorrer devido a restrições não totalmente dependentes das credenciais do usuário conectado. Por exemplo, um servidor pode ter bloqueado recursos específicos para permitir apenas o acesso a partir de um intervalo predefinido de endereços IP ou pode utilizar o bloqueio geográfico. O último pode ser potencialmente contornado com uma VPN.

Podem ocorrer erros 401, mesmo que o usuário insira as credenciais corretas. Isso é raro e pode ser algo que você realmente encontra ao desenvolver seus próprios back-ends autenticados, mas se o cabeçalho da autorização estiver malformado, ele retornará um 401. Por exemplo, você pode ter um JWT (JSON Web Token) que deseja incluir no cabeçalho da solicitação, que espera o formato Authorization: Bearer eyJhbGci......yJV_adQssw5c. Se você esquecer a palavra 'Portador' antes do JWT, encontrará o erro 401. Eu mesmo me deparei com esse problema ao testar APIs em desenvolvimento com o Postman e esquecer a sintaxe correta dos cabeçalhos de autenticação!

É isso aí

Espero que isso esclareça qualquer confusão que contenha esses erros muito semelhantes.

Se você achou isso útil, ou deseja contestar ou estender qualquer coisa levantada aqui, não hesite em entrar em contato comigo no Twitter @JacksonBates.