401 vs 403: escolha o status certo para uma requisição recusada

401 vs 403

401 vs 403: Unauthorized ou Forbidden, e qual retornar | We.Inc

401 significa não autenticado, 403 significa autenticado mas sem permissão. Responda quatro perguntas sobre uma requisição e receba o status certo, com cabeçalhos e código.

Retorne 401 Unauthorized quando a requisição não tem credenciais válidas: nenhum token, uma sessão expirada, uma assinatura inválida. Fazer login poderia resolver, e a resposta precisa trazer um cabeçalho WWW-Authenticate. Retorne 403 Forbidden quando você sabe quem está chamando e mesmo assim essa pessoa não pode fazer aquilo, então entrar de novo não muda nada.

Unauthorized versus Forbidden

Responda quatro perguntas sobre a requisição que o seu servidor está recusando. O seletor devolve o status a enviar, o cabeçalho que vai junto e um motivo de uma linha que você pode colocar em um comentário no código. Ele também cobre o caso em que você prefere não admitir que o recurso existe.

Perguntas frequentes

Qual a principal diferença entre 401 e 403?

O 401 diz que o servidor não sabe quem você é, ou não aceitou a prova que você enviou. O 403 diz que ele sabe quem você é e a resposta continua sendo não.

Um 401 precisa incluir o cabeçalho WWW-Authenticate?

Sim. A RFC 9110 diz que um servidor que gera uma resposta 401 precisa enviar pelo menos um campo de cabeçalho WWW-Authenticate com um desafio, como Bearer para APIs com token.

Um token expirado deve receber 401 ou 403?

401. As credenciais não são mais válidas, e credenciais novas resolveriam. Um desafio Bearer pode dizer isso com error="invalid_token".

Posso retornar 404 em vez de 403?

Sim. A especificação permite que um servidor envie 404 em vez de 403 para esconder se o recurso existe. É uma escolha comum para ids que pertencem a outros usuários.

Um 403 significa que meu endereço IP está bloqueado?

Pode significar. Os servidores enviam 403 para qualquer recusa que consideram definitiva para aquela requisição: regras de IP, falta de permissão em arquivos, uma regra de firewall ou uma verificação de papel que falhou. O corpo da resposta ou o log do servidor normalmente diz qual.

Duas perguntas diferentes

O que a especificação acrescenta

A verificação no código

Middleware Express: primeiro 401, depois 403

verifyToken representa a sua própria verificação de sessão ou JWT. A ordem importa: autenticar, depois autorizar.

Front end: reaja de forma diferente a cada um

Um caminho do código manda o usuário fazer login; o outro explica a recusa.

Qual status devo retornar?

Sim

Não

A requisição trouxe credenciais (cookie de sessão, token, cabeçalho Authorization)?

Essas credenciais eram válidas e não estavam expiradas?

Quem está chamando pode executar essa ação nesse recurso?

Quem não tem acesso deve ficar sem saber que o recurso existe?

Envie isto

Ninguém está logado. Peça credenciais com um desafio.

Chegaram credenciais, mas foram rejeitadas. Credenciais novas resolveriam.

Quem chama é conhecido e não tem permissão. Entrar de novo não vai ajudar.

Quem chama não tem permissão e você prefere não revelar que o recurso existe.

Autenticado e autorizado. Atenda a requisição.

Não perguntado, porque uma resposta anterior já decidiu o status.

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site