Para una página web que existe, pero para la que un usuario que no tiene suficientes privilegios, (no está conectado o no pertenece al grupo de usuarios adecuado), ¿cuál es la respuesta HTTP adecuada para servir? 401? 403? ¿Otra cosa? Lo que he leído hasta ahora sobre cada una de ellas no es muy claro en cuanto a la diferencia entre ambas. ¿Qué casos de uso son apropiados para cada respuesta?
Una clara explicación de Daniel Irvine:
Hay un problema con 401 Unauthorized, el código de estado HTTP para los errores de autenticación. Y eso es todo: es para la autenticación, no para la autorización. Recibir una respuesta 401 es el servidor diciéndote, "no estás no estás autenticado, o no estás autenticado o estás autenticado incorrectamente-pero por favor reautenticate e intenta de nuevo". Para ayudarte, siempre incluirá una cabecera WWW-Authenticate que describe cómo para autenticar.
Esta es una respuesta que generalmente devuelve el servidor web, no la aplicación aplicación web.
También es algo muy temporal; el servidor te pide que lo intentes de nuevo.
Entonces, para la autorización uso la respuesta 403 Forbidden. Es permanente, está ligada a la lógica de mi aplicación, y es una respuesta más concreta respuesta que un 401.
Recibir una respuesta 403 es el servidor diciéndote: "Lo siento. Yo sé quién eres, creo que eres quién dices ser, pero no tienes permiso para acceder a este recurso. permiso para acceder a este recurso. Tal vez si le pides al administrador del sistema administrador del sistema amablemente, obtendrá el permiso. Pero por favor no me molestes a mí de nuevo hasta que tu situación cambie".
En resumen, una respuesta 401 Unauthorized debería ser usada para la falta de o mala autenticación, y una respuesta 403 Forbidden debería ser usada después, cuando el usuario está autenticado pero no está autorizado a realizar la operación solicitada en el recurso dado.
Otro bonito formato pictórico de cómo deberían usarse los códigos de estado http.
[]
Véase RFC2616:
401 No autorizado:
Si la solicitud ya incluía credenciales de autorización, entonces la respuesta 401 indica que la autorización ha sido rechazada para esas credenciales.
403 Prohibido:
El servidor entendió la solicitud, pero se niega a cumplirla.
Actualización
De su caso de uso, parece que el usuario no está autenticado. Yo devolvería 401.
De acuerdo con RFC 2616 (HTTP/1.1) 403 se envía cuando:
El servidor ha entendido la petición, pero se niega a cumplirla. La autorización no ayudará y la petición NO DEBERÍA repetirse. Si el método de solicitud no era HEAD y el servidor desea hacer público por qué no se ha cumplido la solicitud, DEBERÍA describir el motivo de la denegación en la entidad. Si el servidor no desea poner esta información a disposición del cliente, se puede utilizar en su lugar el código de estado 404 (No encontrado)
En otras palabras, si el cliente PUEDE acceder al recurso autenticándose, debería enviarse el código 401.