Suponiendo que la autenticación HTTP ( WWW-Autenticación y encabezados de autorización ) esté en uso , si la autenticación como otro usuario otorgaría acceso al recurso solicitado, se devolverá 401 No autorizado.
403 Prohibido se usa cuando el acceso al recurso está prohibido para todos o restringido a una red determinada o permitido solo a través de SSL, siempre que no esté relacionado con la autenticación HTTP.
Si la autenticación HTTP no está en uso y el servicio es un esquema de autenticación basado en cookies como es la norma hoy en día, entonces se debe devolver un 403 o un 404.
Con respecto a 401, esto es de RFC 7235 (Protocolo de transferencia de hipertexto (HTTP / 1.1): Autenticación):
3.1. 401 no autorizado
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 de origen DEBE enviar un campo de encabezado WWW-Authenticate (Sección 4.4) que contenga al menos un desafío aplicable al recurso de destino. Si la solicitud incluía credenciales de autenticación, la respuesta 401 indica que se ha rechazado la autorización para esas credenciales.. El cliente PUEDE repetir la solicitud con un campo de encabezado de autorización nuevo o reemplazado (Sección 4.1). Si la respuesta 401 contiene el mismo desafío que la respuesta anterior, y el agente del usuario ya ha intentado la autenticación al menos una vez, entonces el agente del usuario DEBE presentar la representación adjunta al usuario, ya que generalmente contiene información de diagnóstico relevante.
La semántica de 403 (y 404) ha cambiado con el tiempo. Esto es de 1999 (RFC 2616):
10.4.4 403 Prohibido
El servidor entendió la solicitud, pero se niega a cumplirla.
La autorización no ayudará y la solicitud NO DEBE repetirse.
Si el método de solicitud no era HEAD y el servidor desea hacer
público por qué la solicitud no se ha cumplido, DEBERÍA describir el motivo del rechazo en la entidad. Si el servidor no desea que esta información esté disponible para el cliente,
se puede usar el código de estado 404 (No encontrado).
En 2014, RFC 7231 (Protocolo de transferencia de hipertexto (HTTP / 1.1): semántica y contenido) cambió el significado de 403:
6.5.3. 403 prohibido
El código de estado 403 (Prohibido) indica que el servidor entendió la solicitud pero se niega a autorizarla. Un servidor que desea hacer público por qué se ha prohibido la solicitud puede describir ese motivo en la carga útil de respuesta (si corresponde).
Si se proporcionaron credenciales de autenticación en la solicitud, el
servidor las considera insuficientes para otorgar acceso. El cliente
NO DEBE repetir automáticamente la solicitud con las mismas
credenciales. El cliente PUEDE repetir la solicitud con credenciales nuevas o diferentes. Sin embargo, una solicitud puede estar prohibida por razones
ajenas a las credenciales.
Un servidor de origen que desea "ocultar" la existencia actual de un
recurso de destino prohibido PUEDE responder con un código de estado de
404 (No encontrado).
Por lo tanto, un 403 (o un 404) ahora podría significar cualquier cosa. Proporcionar nuevas credenciales puede ayudar ... o puede que no.
Creo que la razón por la cual esto ha cambiado es que RFC 2616 asumió que la autenticación HTTP se usaría cuando, en la práctica, las aplicaciones web actuales crean esquemas de autenticación personalizados utilizando, por ejemplo, formularios y cookies.