Respuestas HTTP 403 prohibidas frente a 401 no autorizadas
Para una página web que existe, pero para la cual un usuario no tiene privilegios suficientes (no ha iniciado sesión o no pertenece al grupo de usuarios adecuado), ¿cuál es la respuesta HTTP adecuada para servir?
401 Unauthorized
?
403 Forbidden
?
¿Algo más?
Lo que he leído sobre cada uno hasta ahora no es muy claro sobre la diferencia entre los dos. ¿Qué casos de uso son apropiados para cada respuesta?
Una explicación clara de Daniel Irvine [ enlace original ] :
Hay un problema con 401 Unauthorized , el código de estado HTTP para errores de autenticación. Y eso es todo: es para autenticación, no para autorización. Al recibir una respuesta 401, el servidor le dice: "no está autenticado, o no está autenticado en absoluto o está autenticado incorrectamente, pero vuelva a autenticarse e inténtelo de nuevo". Para ayudarle, siempre incluirá un encabezado WWW-Authenticate que describe cómo autenticarse.
Esta es una respuesta que generalmente devuelve su servidor web, no su aplicación web.
También es algo muy temporal; el servidor te pide que vuelvas a intentarlo.
Entonces, para autorización uso la respuesta 403 Prohibido . Es permanente, está ligado a la lógica de mi aplicación y es una respuesta más concreta que un 401.
Al recibir una respuesta 403, el servidor le dice: “Lo siento. Sé quién es usted, creo en quién dice ser, pero simplemente no tiene permiso para acceder a este recurso. Quizás si se lo pides amablemente al administrador del sistema, obtendrás permiso. Pero, por favor, no vuelvas a molestarme hasta que tu situación cambie”.
En resumen, se debe usar una respuesta 401 no autorizada para una autenticación faltante o incorrecta, y una respuesta 403 prohibida después, cuando el usuario está autenticado pero no está autorizado a realizar la operación solicitada en el recurso dado.
Otro bonito formato ilustrativo de cómo se deben utilizar los códigos de estado http.
Editar: RFC2616 está obsoleto, consulte RFC9110 .
401 No autorizado:
Si la solicitud ya incluía credenciales de autorización, la respuesta 401 indica que se ha rechazado la autorización para esas credenciales.
403 Prohibido:
El servidor entendió la solicitud, pero se niega a cumplirla.
Según su caso de uso, parece que el usuario no está autenticado. Yo devolvería 401.