para pagina estado error codigos codigo codes validation rest django-rest-framework restful-authentication http-status-codes

validation - pagina - http codes



¿Cuál es el código de estado HTTP apropiado para devolver si un usuario intenta iniciar sesión con un nombre de usuario/contraseña incorrectos, pero con el formato correcto? (2)

401 - No autorizado

403 - Prohibido

http://www.buggybread.com/2012/11/http-error-codes-401-access-denied-403.html

Una pregunta similar se publica aquí: ¿Qué es un código de estado HTTP apropiado para que un servicio de REST API devuelva un error de validación?

La respuesta en el hilo anterior dice que "por ejemplo, si se supone que el URI debe tener una fecha ISO-8601 y encuentra que está en el formato incorrecto o se refiere al 31 de febrero, entonces devolverá un HTTP 400. Ditto si espera XML bien formado en un cuerpo de entidad y no se puede analizar ".

Sin embargo, ¿qué sucede si el usuario envía datos con formato correcto? Con esto quiero decir, el usuario envió una cadena / texto alfabético simple para el nombre de usuario y la contraseña (que es perfectamente válido para mi aplicación). El único problema es que la contraseña no coincide con el nombre de usuario. En este caso, 400 será incorrecto porque es una sintaxis perfectamente válida y bien formada.

Un 401 sería incorrecto (como se sugiere aquí: ¿Qué código de estado HTTP para decir el nombre de usuario o la contraseña eran incorrectos? ) Porque el usuario no está tratando de acceder a ninguna página, simplemente está intentando iniciar sesión e ingresó datos que no coinciden.

Si miras hacia atrás a la primera publicación a la que me vinculé, la segunda respuesta indica que 422 es la respuesta correcta (y me parece correcta), sin embargo, estoy usando Django Rest Framework y 422 no es parte de los códigos de estado (una La lista de los códigos de estado que forman parte de DRF se puede encontrar aquí: http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx )

404 tampoco se ve bien porque los datos se aceptan con éxito y no se rechazan.

Dicho esto, ¿cuál es la verdadera respuesta correcta que debería usarse?


El código HTTP correcto en realidad sería 401. Desde el RFC :

El código de estado 401 (no autorizado) indica que la solicitud no se ha aplicado porque carece de credenciales de autenticación válidas para el recurso de destino. El servidor que genera una respuesta 401 DEBE enviar un campo de encabezado WWW-Authenticate (Sección 4.1) que contenga al menos un desafío aplicable al recurso de destino.

Si la solicitud incluyó credenciales de autenticación, entonces la respuesta 401 indica que la autorización ha sido rechazada para esas credenciales. El agente de usuario PUEDE repetir la solicitud con un campo de encabezado de Autorización nuevo o reemplazado (Sección 4.2).