Sinalizando falha de autenticação em uma API RESTful
-
06-07-2019 - |
Pergunta
Eu estou escrevendo um pequeno aplicativo que expõe uma simples RESTO-ish HTTP API. Estou tentando preso para decidir como para sinalizar uma falha devido à falta de autorização.
O aplicativo não tem um API para autenticação, mas em vez disso depende da presença de um cookie contendo um token de sessão obtido pelo cliente através de outro serviço. O aplicativo verifica a sessão e usa a identidade obtida através do processo de verificação para executar a autorização específica de aplicação. Não há nenhuma maneira para um cliente para autenticar diretamente para este aplicativo.
Meu problema é que o código de status HTTP óbvia para rejeitar solicitações não autorizadas, "401 não autorizado", é especificado em termos de cabeçalho "WWW-Authenticate". Consulte RFC2616 seg 10.4.2 .
A resposta deve incluir um WWW-Authenticate campo de cabeçalho (seção 14,47) contendo um desafio aplicável ao recurso solicitado.
Eu não posso acreditar que este é um problema incomum. É comum simplesmente sobrecarregar 401 para incluir usos mais gerais? E sobre navegadores aparecendo auth / e diálogos (que, aliás, eu não vi em meus testes, então talvez isso não acontece por mensagens)?
A linha inferior: é OK para usar 401 neste contexto, ou há uma solução melhor
Solução
Normalmente, você iria enviar um 401 se o cliente pode autenticar e resolver o problema, mas desde que você não fornecer uma maneira para autenticar na API, eu sugiro retornando um erro 403 (proibido) em vez. Isso não vai exigir o cabeçalho e irá indicar ao cliente que ele é incapaz de acessar o serviço.
Outras dicas
Voltar algo como isto:
HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login