Pergunta

Estou projetando uma API RESTful, onde algumas chamadas são públicas sobre o HTTP, e algumas exigem uma chave de API e criptografia sobre o HTTPS. Estou deliberando sobre qual código de resposta deve ser enviado se uma solicitação HTTP for enviada para um dos recursos privados. Até agora o único que pula para mim é 412 - Falha na pré -condição, mas o padrão indica que a pré -condição é imposta pelo solicitante, não pelo servidor.

Existe um código de resposta apropriado para esta condição ou eu só preciso ceder e fazer 400?

Foi útil?

Solução

A maneira mais segura de forçar o cliente HTTP a usar HTTPS é Segurança estrita de transporte http.

Anteriormente, uma sugestão comum era abandonar a conexão, mas esta A prática foi removida em favor dos HSTs (Site da OWASP).

Outras dicas

Não posso dizer se isso for amplamente aceito pelos clientes HTTP, mas falando estritamente RFC, o servidor deve responder com:

HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade

Fonte:
http://tools.ietf.org/html/rfc2817#section-4.2

O código de erro apropriado para retornar seria semelhante a 403.4 - SSL necessário.

Embora não esteja explicitamente documentado no RFC para HTTP 1.1, esse comportamento corresponde aos requisitos descritos lá:

O servidor entendeu a solicitação, mas está se recusando a cumpri -la. A autorização não ajudará e a solicitação não deve ser repetida. Se o método de solicitação não foi chefe e o servidor deseja tornar o público por que a solicitação não foi atendida, ele deve descrever o motivo da recusa na entidade. Se o servidor não desejar disponibilizar essas informações ao cliente, o código de status 404 (não encontrado) poderá ser usado.

Adicionar seu próprio subcódigo (como no exemplo SSL) pode ser útil em alguns casos, mas como esse subcódigo não seria significativo para terceiros, eu recomendaria contra ele.

Portanto, sua mensagem de erro final seria algo como "403 - recurso privado". Observe que, mesmo no caso de uma chave de API ausente, "401 - não autorizada" não deve ser usada, a menos que sua chave da API possa realmente ser transmitida em um campo de cabeçalho www -autenticate.

Retornando a 403 Com a razão da razão "HTTPS necessário"Parece uma opção prática e o que eu uso.

Vejo https://en.wikipedia.org/wiki/http_403

Redirecionar uma API REST não é uma boa ideia, especialmente porque você pode não ter idéia de como ou o que está consumindo seu serviço.

Basta enviar um redirecionamento para os HTTPs correspondentes: URI.

ATUALIZAR

A resposta errada - veja os comentários abaixo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top